【问题标题】:Curl Post method, more then 16000 character unable to send the dataCurl Post 方法,超过 16000 个字符无法发送数据
【发布时间】:2018-02-17 06:49:53
【问题描述】:

在 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

谁能帮我看看我上面的代码有什么问题。

【问题讨论】:

  • 在您的 php 代码中检查此
  • memory_limit : 1280M

标签: php curl php-curl


【解决方案1】:

试试这个:

curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0)

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

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

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

100 如果标头中包含的信息足以立即成功, 417(Expectation Failed)如果不能达到预期;或任何其他 > 4xx 状态。 例如,如果 Content-Length 太大,服务器可能会拒绝请求。

没有常见的浏览器发送 Expect 标头,但其他一些客户端(例如 cURL)默认发送。

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

RFC 声明:(https://www.rfc-editor.org/rfc/rfc7231#section-5.1.1)

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

【讨论】:

  • 当我尝试上面的代码时,返回解析错误:语法错误,意外的 'curl_setopt' (T_STRING) in...,。 @3xIUG
  • 谢谢,我遇到了代理问题(不知何故),在 1kb 数据(提出请求)后将我弹回。并且通过使用 1.0(由于 100-continue),一切都开始在服务器上运行。 +1 ;)
【解决方案2】:

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

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

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


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


Upload max size in PHP?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多