如何使用php curl创建自定义标头并发送json数据?

时间:2014-10-17 03:15:46

标签: php json curl slim

使用php curl我正在尝试连接到我已构建的api。我在使用curl创建自定义标头时遇到问题,试图指定一些标头信息,例如Content-Type,Content-Length。

我也在努力了解如何正确发送(发布)一个充满json数据的http体。

基本上我要做的是让标题包含Content-Type,Content-Length,一些自定义字段,如$ api => " 45234523452345",$ hashedKey => " 32413211234123"

在http-body中发送有效负载(json编码或js​​on编码的多维arry)。

这是我现在正在尝试使用的内容。

public function mainRequest($url, $apiKey) {

      $payload = array(
        'test' => 'data'
      );

      $jsonPayload = urlencode(json_encode($payload));

      $encyptedKey = $this->dataEncyptor->hashData($apiKey);

      $header = array(
        'Content-Type:'   => 'application/json',
        'Content-Length:' => strlen($jsonPayload),
        'x-public'        => $apiKey,
        'x-hash'          => $encyptedKey
      );

      $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_VERBOSE, true);
      curl_setopt($ch, CURLOPT_STDERR, $fp);
      curl_setopt($ch, CURLOPT_HEADER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonPayload);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       // curl_setopt($ch, CURLOPT_POST, 1);

      $result = curl_exec($ch);
      curl_close($ch);

      return $result;
    }

在我的错误日志中,我得到了这个:

* About to connect() to local.nslim.ca port 80 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to local.nslim.ca (127.0.0.1) port 80 (#0)
> POST /datacheck HTTP/1.1
Host: local.nslim.ca
Accept: */*
Content-Length: 29
Content-Type: application/x-www-form-urlencoded

* upload completely sent off: 29 out of 29 bytes
< HTTP/1.1 404 Not Found
< Date: Fri, 17 Oct 2014 03:05:43 GMT
< Server: Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/0.9.8za DAV/2 PHP/5.5.3
< X-Powered-By: PHP/5.5.3
< Content-Length: 514
< Content-Type: text/html
< 
* Connection #0 to host local.nslim.ca left intact
* Closing connection #0

输出到屏幕是:

HTTP / 1.1 404未找到日期:星期五,2014年10月17日03:06:07 GMT服务器:Apache / 2.2.25(Unix)mod_ssl / 2.2.25 OpenSSL / 0.9.8za DAV / 2 PHP / 5.5.3 X-Powered-By:PHP / 5.5.3内容长度:514内容类型:text / html 找不到404页面

找不到您要查找的页面。检查地址栏以确保您的网址拼写正确。如果一切都失败了,您可以访问我们的主页,链接如下。 访问主页

cURL setopt是否需要按任何特定顺序进行?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

所以显而易见的问题是,你有正确的URL吗? 404并不表示页面上有错误,而是页面不存在。它应该是datacheck.php吗?

此外,您不是将数据作为标准网络表单发送,因此您需要将Content-Type标题更改为&text; / text / json&#39;并使用php://input在脚本中检索它。

修改:另请参阅RAW POST using cURL in PHP