cURL和网络浏览器之间的区别?

时间:2012-05-25 16:27:32

标签: php curl get

我正在尝试从以下网址中检索网页:

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或referrer,似乎没有什么区别。有一个重定向,所以我使用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的任何想法?

2 个答案:

答案 0 :(得分:2)

您的浏览器正在发送cURL不是的Cookie。使用浏览器工具或Fidler检查您发送到网站的cookie - 您需要传递相同的内容。

答案 1 :(得分:2)

问题出在cookies上。此特定站点需要设置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是否有效,但它尝试了几个随机的会话ID,但它们都有效。