php CURL发布大字符串

时间:2017-03-25 22:00:51

标签: php curl

我需要使用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/)似乎很有希望,但无法找到解决方案。

1 个答案:

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