我cURL在php中有这个代码.
curl_setopt($ch, CURLOPT_URL, trim("http://stackoverflow.com/questions/tagged/java"));
curl_setopt($ch, CURLOPT_PORT, 80); //ignore explicit setting of port 80
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_HTTPHEADER, $v);
curl_setopt($ch, CURLOPT_VERBOSE, true);
Run Code Online (Sandbox Code Playgroud)
内容HTTPHEADER是;
Proxy-Connection: Close
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __qca=blabla
Connection: Close
Run Code Online (Sandbox Code Playgroud)
它们中的每一个都是数组中的单个项目$v.
当我在主机上传文件并运行代码时,我得到的是:
400错误请求
你的浏览器发送了一个无效的请求.
但是当我使用命令行PHP在我的系统上运行它时,我得到的是
< HTTP/1.1 200 OK
< Vary: Accept-Encoding
< Cache-Control: private
< Content-Type: text/html; charset=utf-8 …Run Code Online (Sandbox Code Playgroud) 我有一个PHP脚本,该脚本通过cURL连接到URL,然后根据返回的HTTP状态代码执行某些操作:
$ch = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => "What?!?"
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
$code = curl_getinfo($ch)["http_code"];
curl_close($ch);
if ($code == "200") {
echo "200";
} else {
echo "not 200";
}
Run Code Online (Sandbox Code Playgroud)
某些Web服务器的回复速度很慢,尽管在我的脚本尝试连接到该服务器几秒钟后,网页已加载到我的浏览器中时,它告诉我它没有收到肯定的答复(“ 200”)。因此,显然,cURL发起的连接超时。
但为什么?我没有在脚本中设置超时,并且根据该站点上的其他答案,cURL的默认超时时间肯定比页面在浏览器中加载所需的三到四秒长。
那么,为什么连接超时了?如果显然已经将其设置为无限,我又如何才能使其持续更长的时间呢?
笔记:
curl_getinfo($ch)并curl_error($ch)按照注释中的@ drew010的建议进行操作,但是无论何时发生问题,两者都为空。更新资料
遵循@Karlos的建议,我使用了:
CURLOPT_VERBOSE => 1,
CURLOPT_STDERR => $curl_log
Run Code Online (Sandbox Code Playgroud)
(使用此答案中的代码),并在$curl_logURL失败(URL和IP更改)时找到以下内容:
* …Run Code Online (Sandbox Code Playgroud)