为什么这是使用PHP cURL找不到的URL?

时间:2013-12-19 22:56:32

标签: php cookies curl

我有一个奇怪的场景,PHP的cURL将无法解析主机,而是返回Header代码400,这是错误的 - 网站已启动,这里是网址:

http://www.mesearcher.com/persoon/Tim%20Hooper.html

这是我的PHP的cURL代码。

    $ch = curl_init();
    $options = array(
            CURLOPT_RETURNTRANSFER => true,     // return web page
            CURLOPT_HEADER         => true,    // return headers
            CURLOPT_NOBODY         => true,     // we don't need content
            CURLOPT_FOLLOWLOCATION => true,     // follow redirects
            CURLOPT_HTTPGET        => true,
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_USERAGENT      => "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    , // who am i
            CURLOPT_AUTOREFERER    => true,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 10,      // timeout on connect
            CURLOPT_TIMEOUT        => 10,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
            CURLOPT_SSL_VERIFYHOST => 2,
            CURLOPT_SSL_VERIFYPEER => false,


    );
    curl_setopt($ch, CURLOPT_URL,trim(urldecode($url)));
    curl_setopt_array($ch, $options);
    $r = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if($ch === FALSE){
        return "Error : <b><u>".curl_error($ch)."</b></u>";
    }
    if($httpCode >= 200 && $httpCode < 400 ){
        return true;
    }else{
        return "$httpCode - Additional : ". curl_errno($ch);
    }

该网站在浏览器中运行良好,我已经看到它的标题,甚至阻止页面设置cookie以确保它不是cookie问题,curl_errno返回0作为错误编号,这很奇怪太。另外,网站http://www.mesearcher.com/工作正常并返回true。但是当附加查询/persoon/Tim%20Hooper.html时,它会神秘地返回错误代码400。

我哪里错了?

最佳

1 个答案:

答案 0 :(得分:1)

您无意中丢失了网址空间的有效编码。

所以你需要把%20放回去。

尝试这样的事情:

$url = trim(urldecode('http://www.mesearcher.com/persoon/Tim%20Hooper.html'));
$url = str_replace(' ', '%20', $url);
curl_setopt($ch, CURLOPT_URL,$url);