Curl Post方法,超过16000个字符无法发送数据

时间:2018-02-17 06:49:53

标签: php curl php-curl

在PHP Curl代码中,我们只能一次发送 16,000个字符。如果发送的所有数据都包含超过16,000个字符,则数据将被分解并发送到服务器。

以下是数据的细分方式:

如何传递数据:

$parameters {
   "Data1" => 1.
   "Data2" => <string_containing_20000_characters>,
   "Data3" => <string_containing_25000_characters>,
   "Data4" => 4
}

如何将其发送到服务器:

_POST {
   "Data1" => 1.
   "Data2" => <first_16000_characters><first_4000_characters>,
   "Data3" => <first_16000_characters><first_9000_characters>,
   "Data4" => 4
}

我的PHP代码:

$curl_post_data = array("Data1" => "1", "Data2" => "<string_containing_20000_characters>", "Data3" => "<string_containing_25000_characters>", "Data4" => "4");

$curl = curl_init($rest_webservice_url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$rest_return_data = curl_exec($curl);
curl_close($curl);
echo $rest_return_data;

php.ini 下方已完成更改。

max_execution_time = 300
max_input_time = 600
memory_limit = 1280M
post_max_size = 2048M
upload_max_filesize = 2048M
max_file_uploads = 200

可以请任何人帮我解决上面代码的错误。

2 个答案:

答案 0 :(得分:2)

尝试一下:

curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0)

似乎CURL会在发送大数据时设置额外的标头:Expect: 100-Continue,在您的情况下您不需要。 Mozilla Developer网络将其描述为:

  

Expect HTTP请求标头表示服务器需要满足的期望才能正确处理请求。

     

规范中定义的唯一期望是Expect:100-continue,服务器应响应:

     如果标题中包含的信息足以立即成功,则

100,   417(期望失败)如果不能满足期望;或任何其他&gt;否则为4xx状态。   例如,如果请求的Content-Length太大,服务器可能会拒绝该请求。

     

没有常见的浏览器发送Expect标头,但是其他一些客户端(如cURL)默认情况下会这样做。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect

RFC规定:(https://tools.ietf.org/html/rfc7231#section-5.1.1

  

在HTTP / 1.0中接收100-continue期望的服务器         请求必须忽略这种期望。

答案 1 :(得分:1)

您还必须编辑您的Web服务器配置文件(在接收数据的服务器上)。

如果您使用 nginx 设置client_max_body_size 10M或您认为合适的任何其他值。

apache 上,您将拥有LimitRequestBody 10485760(10MB)

建议设置合理的值,例如。 2GB

请参阅Upload max size in PHP?