0

编辑:事实证明数据发送得很好,但是在 PHP 中查看正文无法正常工作。有关更多信息,请参阅我的答案。

我正在尝试将 json 数据发布到服务器。我只需要内容类型为 json 并且正文具有 json 格式的字符串。我的问题是内容类型保持为 text/html 并且无论我尝试什么,我都无法更改该内容类型。我阅读了许多堆栈溢出答案,它们似乎都应该工作,但它们没有。我的代码如下。

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));      
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  curl_exec($ch);

在接收端,我只是打印 getallheaders 和 get_file_contents('file://phpinput')。

为什么我的内容类型没有正确通过?

如果有帮助,这是一个示例输出:

string 'HTTP/1.1 200 OK
Date: Wed, 17 Apr 2013 16:24:56 GMT
Server: Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/0.9.8r DAV/2 PHP/5.4.4
X-Powered-By: PHP/5.4.4
Content-Length: 71
Content-Type: text/html

Array{"level1a":{"level2":{"a":2,"b":3}},"level2b":["111","333","999"]}' (length=273)
4

2 回答 2

1

您需要创建两个 php 文件,一个客户端 (client.php) 和一个服务器 (server.php)。

服务器读取 json 请求并发送回 (json) 响应。您的客户端将 json 发送到服务器并读取响应。

您 server.php 需要在网络服务器上可用http://localhost/server.php。您可以从同一台服务器或其他服务器运行您的客户端http://localhost/client.php。您也可以从命令行运行客户端php -f client.php

服务器.php:

<?
// read json input
$input = json_decode(file_get_contents('php://input'));
$response = array('text'=>'Your name is: '.$input->{'name'});
header("Content-type: application/json");
// send response
echo json_encode($response);
exit;

客户端.php:

<?
$data = array('name'=>'Jason'); // input
$ch = curl_init('http://localhost/server.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$result = curl_exec($ch);
curl_close($ch);
list($headers, $content) = explode("\r\n\r\n", $result, 2);
$php = json_decode($content);
echo 'Response: ' . $php->text;
// if you want to know
var_dump($headers);
exit;
于 2013-04-17T22:30:39.110 回答
0

所以事实证明没有错。我不确定“数组”部分来自哪里,但我发布的 API 可以正常接收数据。我认为如果有人发布了一种方法来准确查看 curl 请求发送的内容,那就太好了,这样人们可以比我更容易地进行故障排除。

于 2013-04-17T21:18:17.257 回答