我在我公司的一个网站上测试了PHP中的303重定向用例,我注意到两个不同情况之间有很大的延迟,一次执行正常,另一次持续10秒,我意识到这是超时我set(使用CURLOPT_TIMEOUT标志)。
测试是尝试在重定向后POST查询转换为GET查询的情况。
我用301和302重定向测试了它,结果是一样的。在经历了这个问题的苦苦挣扎后,我找到了解决方案,我觉得分享会很有趣。
重定向页面
<?php
header("HTTP/1.1 303 See Other");
header("Location: http://127.0.0.1/test-303-redirection-2.html");
cURL示例脚本
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/test-303-redirection-1.php");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "field1=value1&field2=value2");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'host: 127.0.0.1',
'accept: */*',
'content-length: 29',
'content-type: application/x-www-form-urlencoded'
)
);
$theResponse = curl_exec($ch);
print_r(curl_getinfo($ch)) ;
这个脚本每次执行都会持续10秒。
答案 0 :(得分:1)
该错误发生在我们的cURL包装器类中,它使用POST字段长度添加内容长度标头。这使得标题发送如下:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'host: 127.0.0.1',
'accept: */*',
'content-length: 29',
'content-type: application/x-www-form-urlencoded'
)
);
只是从数组中删除内容长度标头删除了超时,执行顺利,应该是。我希望这有助于某人