我需要使用php将大字符串(6000个字符)发布到服务器,该字符串是在php中动态创建的。
$ch = curl_init('http://localhost:8080/mypost');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
当data_string很小时它工作正常,但一旦它超过几千个字符就会挂起。在php控制台中没有错误,只是没有完成。有趣的是,它在Quercus PHP(它不使用libCurl但它自己的实现)中工作正常,但它在标准php(PHP 5.3.10-1ubuntu3.26)中不起作用。我需要让它在标准的PHP中工作。
接受服务器是JVM-Grizzly服务器。我用Java编写了另一个客户端,它可以很好地发布字符串,所以我不认为问题出在服务器上。
我看到这篇文章(https://forums.phpfreaks.com/topic/143602-long-string-passed-to-curl-postfields-not-getting-posted/)似乎很有希望,但无法找到解决方案。
答案 0 :(得分:0)
使用选项CURLOPT_BUFFERSIZE
试试这个:
$ch = curl_init('http://localhost:8080/mypost');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 84000);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);