2

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

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 运行它时,我收到一个带有以下错误的页面:“请求的 url 的一个或多个查询字符串参数无效或具有意外值,请更正并重试。”

如果我提供不同的 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

您的浏览器正在发送 cURL 没有发送的 cookie。使用浏览器工具或 Fidler 检查您发送到站点的 cookie - 您需要传递相同的信息。

于 2012-05-25T16:33:37.370 回答
2

问题出在 cookie 上。该特定站点需要设置 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 回答