使用cURL和PHP,无法为少数网站获取标头

时间:2009-09-18 00:07:23

标签: php curl

我在使用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

1 个答案:

答案 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);