2

次の URL から Web ページを取得しようとしています。

http://www.medicare.gov/find-a-doctor/provider-results.aspx?searchtype=OHP&specgrpids=922&loc=43615&pref=No&gender=Unknown&dist=25&lat=41.65603&lng=-83.66676

ブラウザーに貼り付けると機能しますが、cURL で実行すると、次のエラーが表示されたページが表示されます。

別の userAgent またはリファラーを提供しても、違いはないようです。リダイレクトがあるので CURLOPT_FOLLOWLOCATION を使っています。

これが私のコードです:

$ch = curl_init($page);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$html = curl_exec($ch);
curl_close($ch);
echo $html;

このようなリクエストがブラウザーでは機能し、cURL では機能しない理由について何か考えはありますか?

4

2 に答える 2

2

問題はクッキーにありました。この特定のサイトでは、応答するために ASP.NET_SessionId Cookie セットが必要でした。cURL リクエストに以下を追加しました。

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIE, 'ASP.NET_SessionId=ho1pqwa0nb3ys3441alenm45; path=/; domain=www.medicare.gov');

セッションIDが機能するかどうかはわかりませんが、ランダムなものをいくつか試したところ、すべて機能しました。

于 2012-05-25T17:33:39.993 に答える
2

お使いのブラウザは、cURL が送信していない Cookie を送信しています。ブラウザ ツールまたは Fidler を使用して、サイトに送信している Cookie を確認してください。同じものを渡す必要があります。

于 2012-05-25T16:33:37.370 に答える