【问题标题】:cURL header problems when posting JSON发布 JSON 时出现 cURL 标头问题
【发布时间】:2013-07-16 09:37:31
【问题描述】:

我正在构建 API,但在使用 cURL 进行测试时遇到了一些问题。

我的代码如下所示:

$people = array( array('name' => urlencode('casper'),
                       'shoesize' => urlencode(41)
                      ),
                 array('name' => urlencode('charlotte'),
                       'activated' => urlencode(1)
                      )
          );

$data = http_build_query(array('data' => json_encode($people)));
$url = '...';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
    'Content-Type: application/json',
    'Connection: Keep-Alive'
));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

return $result; 

URL 端点的方法只返回 $_POST['data']。

这一直有效,直到我在 cURL 中设置我的标题。如果没有设置它们,数据将毫无问题地通过。

【问题讨论】:

  • 到底是什么问题?您提到它在没有标题的情况下工作正常,但它们出了什么问题?
  • @JohnVanDeWeghe OP 正在使用 json 数据但未正确发送 json 数据。请看下面我的回答
  • 问题是我需要标头类型来正确处理请求。但是在 cURL 中设置它们时不会发送任何数据。

标签: php json http post curl


【解决方案1】:

如果您使用json 标头,则发送 json 数据 替换

$data = http_build_query(array('data' => json_encode($people)));

 $data = json_encode($people);

并使用fopen('php://input','r');在目标文件中获取它

或者根本不发送标头。

你可以看到blog

【讨论】:

  • 我需要标头,因为我的 API 应该能够处理不同的数据格式。感谢你的回答。我不明白为什么我必须使用 fopen?
  • 你能得到想要的结果吗?我会解释你为什么需要这样
  • 当我这样做时,请求会发送。但我无法检索结果。查看 $_POST 给了我一个空数组。不确定如何使用 fopen 实际输出或将其转换为 PHP 数组。就像我可以对数据进行 json_decode 一样。
猜你喜欢
  • 2013-05-22
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2019-01-31
相关资源
最近更新 更多