【问题标题】:php curl post a large json objectphp curl 发布一个大的 json 对象
【发布时间】:2016-03-20 06:15:18
【问题描述】:

所以,我有一个发送大型 JSON 对象的 php 脚本,这是我用来执行此操作的代码。

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl, CURLOPT_VERBOSE, true);
$json_response = curl_exec($curl);

现在数据少的时候,请求顺利通过。但是,当 json 对象变大时,它突然无法发送数据,而是在请求标头中显示“Content-Length:0”,就好像它不包含该对象一样。

我假设数据的大小是有限制的。有没有办法绕过它?

我搜索了类似的问题,并找到了发送文件的解决方案。但是我这里的对象是来自数据库的结果集,因此我宁愿保留文件方法作为最后的手段。

谢谢。

【问题讨论】:

  • 服务器可能有限制,您可以发送多少大数据。也许你正在跨越这个限制。
  • 我增加了 php.ini 中的所有限制,包括“memory_limit”、“post_max_size”、“max_input_time”和“max_execution_time”。有什么我想念的吗?
  • 我说的不是你方的限制,而是你要发送到的服务器端。
  • 我也可以完全控制另一端,我也增加了这些数字。让我相信这是请求中的问题的原因是“内容长度”突然变为 0。
  • 尝试在您的 HTTP 标头中显式发送“Content-Lengh”标头,在您的情况下等于 strlen(json_encode($data))

标签: php json curl


【解决方案1】:

所以基本上你已经有了 HTTPHEADER 但是你缺少 Content-length 尝试这样:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-length:' . strlen($data)));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl, CURLOPT_VERBOSE, true);

$json_response = curl_exec($curl);

【讨论】:

  • 这假设 $data 已经是 json 编码,但事实并非如此。为了清楚起见,我认为您可能需要用他的整个 sn-p 展示一个完整的示例。
  • 哦,是的,你是对的!感谢您的建议! @Sleavely
猜你喜欢
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2014-08-25
  • 1970-01-01
  • 2011-12-19
  • 2020-12-09
  • 1970-01-01
相关资源
最近更新 更多