重定向中的PHP cURL超时

时间:2014-07-16 11:28:10

标签: php redirect curl timeout

我在我公司的一个网站上测试了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秒。

1 个答案:

答案 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'
    )
);

只是从数组中删除内容长度标头删除了超时,执行顺利,应该是。我希望这有助于某人