在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
可以请任何人帮我解决上面代码的错误。
答案 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