4

実際、それは非常に乱雑になっているので、カールが原因であるかどうかさえわかりません。だから、ここにphpがあります:

$creds = array(
    'pw' => "xxxx",
    'login' => "user"
    );

$login_url = "https://www.example.net/login-form"; //action value in real form.
$loginpage = curl_init();

curl_setopt($loginpage, CURLOPT_HEADER, 1);
curl_setopt($loginpage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($loginpage, CURLOPT_URL, $login_url);
curl_setopt($loginpage, CURLOPT_POST, 1);
curl_setopt($loginpage, CURLOPT_POSTFIELDS, $creds);

$response = curl_exec($loginpage);
echo $response;

ヘッダー(通常の成功したリクエストのヘッダーと一致します)が表示され、続いてログインページ(リダイレクトのためにcurlがこれをキャプチャしたと思います)が表示され、「不正な連絡先タイプ」の効果にエラーがあります。

問題は、リクエストのホストがリモートサーバーではなくリクエスト元のサーバーに設定されていることだと思いましたが、(Firebugで)リクエストがPOSTではなくGETとして送信されていることに気付きました。

ログインサイトのフォームをコピーし、値を含むフォーム要素だけに分解して、アクションの完全なURLを入力すると、うまく機能します。したがって、これは、ログイン要求が同じサーバーなどで発信される必要があるセキュリティの問題ではないと思います(空の非表示の値と、他のCookieの一部を設定するすべてのJSを削除することもできます)。

それからまた、私はすぐに混乱します。

GETとして表示される理由、または機能しない理由について、何か考えはありますか?

4

4 に答える 4

2

PHP-cURL関連の問題のクラス全体をトラブルシューティングするときは、CURLOPT_VERBOSEをオンにして、CURLOPT_STDERRにファイルハンドルを指定するだけです。

tail -fファイルを作成し、ヘッダーと応答をFirebugに表示されるものと比較すると、問題が明らかになるはずです。

于 2009-08-09T01:00:56.543 に答える
1

示されているコードは、マルチパートフォームポストを実行します(ハッシュ配列をPOSTFIELDSオプションに渡すため)。これは、ターゲットサーバーが期待するものではない可能性があります。

于 2009-06-06T21:29:47.337 に答える
1

リクエストはサーバーから行われ、Firebugには表示されません。(おそらく、ブラウザからの別のリクエストと混同しているでしょう)。Wiresharkを使用して、実際に何が起こっているかを調べます。設定していませんCURLOPT_FOLLOWLOCATION; リダイレクトに従うべきではありません。

要約:推測を減らし、投稿を増やします。pcapダンプにリンクすると、何が間違っているのかを正確に知ることができます。または、phpスクリプトの正確な出力を投稿してください。

于 2009-06-05T12:01:49.417 に答える
0

最後にaprint_r(curl_getinfo($loginpage))を挿入してみて、返送されたヘッダーデータを確認してください。

また、サイトからのログインを偽造しようとしている場合は、投稿とともに正しいリファラーを送信していることを確認して、送信時にWebサイトにいると「思わせる」ようにします。

于 2009-08-09T00:30:17.330 に答える