我正在尝试测试以下功能,但每次我尝试使用任何类型的代理IP(我现在尝试过 15 ) - 我通常会得到同样的错误:
Received HTTP code 0 from proxy after CONNECT
这是功能,有什么不对吗?它可能只是我正在使用的代理,但我现在已经尝试了几次。
function getPage($proxy, $url, $referer, $agent, $header, $timeout) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
$result['EXE'] = curl_exec($ch);
$result['INF'] = curl_getinfo($ch);
$result['ERR'] = curl_error($ch);
curl_close($ch);
return $result;
}
总的来说,无论如何我可以改进它吗?
我感谢所有人的帮助。
当我提交此内容时,我尝试了另一个代理,它确实有效!
另一个问题仍然存在,我该如何改进上述内容。执行需要大约3-4秒,我能做什么,或者这太小了?
答案 0 :(得分:1)
我知道您回答了第一个问题,但代码0
不是有效的http状态代码。它们都应该以1(信息),2(成功),3(重定向),4(客户端错误)或5(服务器错误)开头。如果有人知道为什么你会得到这个代码,我会真的很分裂。搜索libcurl site并没有带来任何好处。
(如果您有兴趣,可在此处获取更多详细信息:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlt)
对于第二个问题,我认为您需要找到最长操作的位置。microtime()
函数可能对您有用。 documentation for microtime()有一些示例脚本可以帮助您使用计时器。
我怀疑虽然3-4秒的大部分时间都在等待curl_exe($ch)
通过代理获得回复。