最近遇到一个很奇怪的问题
在发送post请求时,如果POSTFIELDS的类型为string的话,就会超时,但类型为array就没问题。$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
// 数据为string类型时,超时;
// 如果是array('param' => $data_string)就没问题。
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_exec($ch);
curl_close($ch);
在发送post请求时,如果POSTFIELDS的类型为string的话,就会超时,但类型为array就没问题。$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
// 数据为string类型时,超时;
// 如果是array('param' => $data_string)就没问题。
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_exec($ch);
curl_close($ch);
这是它们唯一的区别,超时是网络因素我觉得,和代码无关
另外你的TIMEOUT调的的确有点小了,超时就像家常便饭
都是本地的请求,而且被请求的页面只是print_r($_SERVER);如果数据是array的话,一点问题也没有,改为string则必超;时间设为30s都会超时。
另外,如果不显示的设置为POST请求(删掉curl_setopt($ch, CURLOPT_POST, true);语句),可以成功发送,但请求类型会变为GET;array的话则正常,为POST请求。
$data_string = "ispost=ok&msg=post";
$data = array("ispost"=>"ok","msg"=>"post");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/my/www/getdata.php");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
getdata.php里面print_r($_REQUEST);
谢谢各位!