我在使用curl检索少数网站的标头时遇到了问题。
一些例子是digg.com和microsoft.com。
function get_headers_curl($url, $port)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PORT, $port);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$r = curl_exec($ch);
$r = split("\n", $r);
return $r;
}
这是我目前正在使用的功能和选项,为了便于使用,我有一个小小的测试脚本运行@ isitup.org/test.php?d=example.com 。它只返回响应的标题,并且示例网站缺少一个。
问题是这些网站似乎忽略了请求而我没有得到回应。我玩过不同的选项,但似乎无法得到回应。
有什么我想念的吗?或者是否无法使用curl访问此类网站?
此致
萨姆
编辑:
test.php如下:
<?php
$domain = preg_replace("/[^A-Za-z0-9-\/\.\:]/", "", trim($_GET["d"]));
$agent = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8";
function get_headers_curl($url, $port)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_HEADER, true);
// curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PORT, $port);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
$r = curl_exec($ch);
$r = split("\n", $r);
return $r;
}
$headers = get_headers_curl("http://".$domain, 80);
print("<pre>".print_r($headers,true)."</pre>");
?>
然而,新用户代理仍无法从这些网站获得回复......
更新:Woops看到了我的错误,将代理转移到了函数中,然后就可以了!谢谢:P
答案 0 :(得分:4)
当我使用CURLOPT_USERAGENT添加用户代理字符串时,这两个工作正常。
// e.g.
$agent = 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8';
curl_setopt($ch, CURLOPT_USERAGENT, $agent);