我有一个奇怪的场景,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。
我哪里错了?
最佳
答案 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);