1

複数のcURLリクエストを実行する方法を理解するのに少し苦労しており、何が間違っているのか完全にはわかりません。私が書いたWebフォームを介してログインするためのコードが正しくない可能性がありますが、それを実行する前に最初のクエリを実行する必要があるため、それ自体をテストすることは困難です。

これは、最初のクエリ用に持っているコードです。

$handle = curl_init();

$login_user = 'user';
$login_pass = 'pass';

$username = 'username';
$password = 'password';

$postdata = "username=".$username."&password=".$password; 

curl_setopt($handle, CURLOPT_URL, 'http://somewebsiteexample.php');
curl_setopt($handle, CURLOPT_USERPWD, $login_user . ":" . $login_pass );
curl_setopt($handle, CURLOPT_POST, true);

curl_setopt($handle, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($handle);
curl_close($handle);

echo '<pre>';
print_r($response);
?>

これにより、基本的なhttp認証を通過できます。次に、Webフォームのphpページにリクエストを投稿して、サイトにログインできるようにする必要があります。

これを行う方法の例をたくさん見てきましたが、それはそれ自体でのみであり、2番目のcURLリクエストとしてではありません。

個々のリクエストを実行するために必要なすべての情報を持っていますが、2つのリクエストを組み合わせる方法がわかりません。同じcURLセッションでそれを行いますか?

カールの初期化リクエストを個別に実行する必要があり、CURLOPT_COOKIEJARを使用してCookieを介して最初のリクエストからのログイン情報を保存する必要があると感じます。(または、同じcurl_init()で2番目のクエリを実行できますか?)

その場合、基本http認証要求を保存して、次にcurlを初期化するときに、すでにWebサイトにログインして、WebフォームにPOSTできるようにするにはどうすればよいですか?複数のcURLリクエストを実行する方法がわかれば、残りの部分を理解できるでしょう。

私はcURLにかなり慣れていないので(私はまだ多くの場合Webページにfile_get_contents()を使用しています)、Webフォーム経由でログインするためにどのcURLオプションが絶対に必要かについても少しわかりません。非常に明白に見えるものもあれば、そうでないものもあります。これはおそらく私自身で理解できることですが、各CURLOPT定数がその特定のコンテキストで何をするかについての内訳を含むcURLでログインするための確かなチュートリアルを見つけるのは難しいです。

php.netのマニュアルには多くの情報があり、さまざまなcURLオプションが何に関連しているかを説明していますが、それらの特定の使用法の具体的な例は提供していません。cURLのより詳細な説明を入手できる別のリソースサイトがあれば、それもありがたいです。

4

2 に答える 2

3

ログインは Cookie を介して処理されます ( URL パラメーターを介して処理されない場合)。必要なことは、ログイン クエリへの応答で受信した Cookie を保存し、各要求で Cookie を送り返すことです。を使用して受信した CookieCURLOPT_COOKIEJAR保存し、リクエストごとに CookieCURLOPT_COOKIEFILEロードする場合、cURL はこれを自動化できます。両方のオプションを同じファイルに設定するだけです。

于 2012-12-07T12:23:30.253 に答える
2

curl のデバッグ方法を調べる必要があります。curl_error($curl)Curl は当然何もトレースしません。リクエストの forとcurl_errno($curl)その後で、リソースが で閉じられる前に呼び出す必要がありますcurl_close($curl)

curl_getinfo($curl)また、リクエストとレスポンスに関する詳細をトレースする必要があります。スクリプトの構文エラーが空白ページの原因ではないことを確認してください。

次の部分。CURLOPT_COOKIEJARCURLOPT_COOKIEFILEを Cookie 処理用に追加します。同じ curl リソースに対して 2 番目のリクエストを実行curl_close($curl)し、すべてのリクエストが完了した後に実行します。Curl はリクエスト間のセットアップの大部分を保存しているので、心配する必要はありません。

また、ユーザー エージェントとリファラーの設定を追加して、リクエストがより自然に見えるようにすることもお勧めします。

于 2012-12-07T18:09:42.083 に答える