3

php curl でユーザー名とパスワードを使用してサイトにログインしようとしています。

<?php
$url = 'http://XXXXX.com/login';
$ch = curl_init();
$formFields = array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login');
$cookiefile = 'C:/wamp/www/tests/cookies.txt';

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formFields);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);

echo $response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

しかし、$response で完全な html を取得できません。ブラウザで、html で 1000 行を取得している場合を意味します。curl では、約 350 行の html を取得しています。

以前は動いていたのですが、突然動かなくなりました。

何か助けはありますか?

4

2 に答える 2

0

サーバーは、メタリフレッシュまたはある種のエラーで応答している可能性があります。応答ヘッダーを確認してください...開始するのに適した場所です

$response = curl_exec($ch);
print_r(curl_getinfo($ch));

また、http_build_query()を使用して、投稿フィールドを配列ではなく文字列として送信する必要があります。

$formFields = http_build_query( array('username' => 'XXXX', 'password' => 'WAO', 'button' => 'Login'));
于 2012-11-02T06:58:14.880 に答える
0

ロードしているページが Ajax を介してページにコンテンツをロードしている場合、明らかに異なる結果が得られます。また、あなたが言及したサイトは、ajax リクエストを介してコンテンツをロードしているようです。

cURL は JavaScript を解析しない/解析できないため、ajax を介してコンテンツをロードできません。したがって、通常のブラウザーから取得するのとまったく同じコンテンツを取得する方法はありません。

上記のステートメントは、cURL の出力と browser-with-javascript-disabled の出力を比較して同じであることを確認することで確認できます。

于 2012-11-02T08:51:55.387 に答える