【问题标题】:How to make a POST request with PHP given the following HTTP + JSON给定以下 HTTP + JSON,如何使用 PHP 发出 POST 请求
【发布时间】:2016-10-29 23:18:52
【问题描述】:

我一直在尝试使用名为WorkWave API 的PHP 发出POST 请求。这是他们提供的用于发出 POST 请求以设置应用的回调 URL 的代码:

POST /api/v1/callback HTTP/1.0
Accept: application/json
X-WorkWave-Key: YOUR API KEY
Host: wwrm.workwave.com
Content-Type: application/json

{
  "url": "https://my.server.com/new-callback",
  "signaturePassword": "g394g732vhsdfiv34",
  "test": true
}

我对处理 POST 和 GET 请求还很陌生,所以我不太明白这里发生了什么。 JSON 括号上方的键和值到底是什么? 我如何将这里给出的内容翻译成 PHP 以及在这样做时需要理解的最重要的事情是什么?

【问题讨论】:

    标签: php json rest post get


    【解决方案1】:

    第一个 blob 是您需要随请求一起发送的标头。 JSON 是帖子正文的有效负载。

    <?php
    
    $url = 'https://wwrm.workwave.com/api/v1/callback';
    
    $data = '
    {
      "url": "https://my.server.com/new-callback",
      "signaturePassword": "g394g732vhsdfiv34",
      "test": true
    }
    ';
    
    $additional_headers = array(                                                                          
       'Accept: application/json',
       'X-WorkWave-Key: YOUR API KEY',
       'Host: wwrm.workwave.com',
       'Content-Type: application/json'
    );
    
    $ch = curl_init($url);                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers); 
    
    $server_output = curl_exec ($ch);
    
    echo  $server_output;
    

    【讨论】:

    • 或者你可以使用guzzle,它是一个非常流行且干净的原始curl请求的包装器。
    • 好吧,这些标头是请求之前的信息,对吗?假设我想请求图像,我必须指定我想在标题中获取特定资源,对吗?当您想要获取数据时,对数据库的查询是否也使用标头,或者与发出 GET / POST 请求完全分开?
    • @10000R,数据库查询与 HTTP 请求完全无关。每次访问网站时,您都在发出 HTTP 请求。每个请求必须有一个标头,该标头必须包含一些必填字段,例如 URL。 Curl 将这些要求构建到请求对象中。 CURLOPT_HTTPHEADER 用于附加标头,HTTP 规范不一定要求,但对服务器仍然有用。并不是这些标头在请求之前,它们是请求的一部分。并非每个请求都需要有正文或数据有效负载。您对图像的请求是正确的。
    • 太棒了,这很有帮助,你解释得很好。有任何推荐的资源来了解有关 GET 和 POST 请求的更多信息吗?
    • @10000RubyPools 我真的不知道任何教程,但this wikipedia page 是一个很好的开始。很快你就可以弄清楚 HTTP 系统是如何工作的,然后你就会意识到它并没有那么复杂。虽然它有很多复杂性,例如使用传输层安全性(以前称为 SSL)和跨源资源共享 (CORS) 进行加密,但不要一开始就被这些东西分心。专注于 REST,您将大致了解万维网的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多