2011-07-07 8 views
0

タイトルが示唆するように、ログインが必要なサイトで(複数の)ページの内容を取り戻そうとしています。これは正当なログインであり、私はコンテンツにアクセスできます。ログイン後にリモートファイルの内容を取得する

私はSOを検索して、同じことを試みているポスターをいくつか見つけました。この特定の問題の原因は何も見つかりませんでした。

私はいくつかのバリエーションを試しました - FOLLOWLOCATIONのようなさまざまなオプションを追加しました(trueに設定してからfalseに設定しようとしました)。タイムアウトを増加させる。 COOKIEJARとCOOKIEFILEの両方を設定します。ログイン後にcurl_closeを呼び出すと、(ターゲットファイルをロードする前に)新しいcurl_initが実行されます。従来のPHPメソッドを使用してファイルを取得します(file_get_contentsなど)。明示的にクッキーファイルを作成し、それを書き込み可能に設定します。 REFERERの有無にかかわらず試しました。 REFERERを変更しようとしました。 httpとhttpsの両方のプロトコルを試しました。最初にcurl_closeを1回呼び出してクッキーを書き込むようにしてから、すぐにスクリプトブロックを実行してみました。等...運がいいな。

以下は、使用中のコードのスナップショットです(今のところ1つのファイルを取得しようとしています)。

何か提案がありがとうございます。

$e = curl_init(); 
curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/login.php'); 
curl_setopt($e, CURLOPT_POST, 1); 
curl_setopt($e, CURLOPT_POSTFIELDS, 'username=bob&password=1234'); 
curl_setopt($e, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($e, CURLOPT_REFERER, 'https://www.some-site.com'); 
curl_setopt($e, CURLOPT_RETURNTRANSFER, 1); 
curl_exec($e); 

curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/posts.php?id=1'); 
$content = curl_exec($e); 

print htmlentities($content); 

curl_close($e); 

実際のエラーはありません - カールはそれのようにする必要があり取り組んでいるが、$コンテンツは、「ログインしていない...今ログインしてください...」ページに設定されているが。

ブラウザ(Fx、Chrome、Safari、IE)経由でログインした後、各投稿に問題なくアクセスできます。

私は困惑しています。

TYIAどのような提案についても - 追加情報があれば、LMKを参考にしてください。

+0

は 'https://でwww.some-site.com/login.php'ユーザ名とパスワードが掲載されている場所への実際の提出スクリプト? – tradyblix

+0

@tradyblix - はい、ログインフォームの動作です - ログインフォームがhttp://www.some-site.com/login.htmlであると仮定します。私はそれを言及すべきだった。 – momo

+0

最初のリクエスト(login.php)で '$ content = curl_exec($ e);'を実行し、 '$ content'をダンプするとどうなりますか? – tradyblix

答えて

2

これは、サイトにログインした後にページコンテンツを取得するために使用しています。ログイン後

$login_url = 'http://www.examplesite.com/php/login.php'; 

//These are the post data username and password 
$post_data = 'loginuser=smith&loginpass=sh20147'; 

//Create a curl object 
$ch = curl_init(); 

//Set the useragent 
$agent = $_SERVER["HTTP_USER_AGENT"]; 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 

//Set the URL 
curl_setopt($ch, CURLOPT_URL, $login_url); 

//This is a POST query 
curl_setopt($ch, CURLOPT_POST, 1); 

//Set the post data 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 

//We want the content after the query 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 



//Follow Location redirects 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

/* 
Set the cookie storing files 
Cookie files are necessary since we are logging and session data needs to be saved 
*/ 

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 

//Execute the action to login 
$postResult = curl_exec($ch); 
print_r($postResult); 

は、以下の通りログインページまたは特定のページの内容を取得します。

$url = 'http://www.examplesite.com/members/home.php'; 


curl_setopt_array(
    $ch, array(
    CURLOPT_URL => $url , 
    CURLOPT_RETURNTRANSFER => true 
)); 

$output = curl_exec($ch); 
echo $output; 

More details

関連する問題