PHP cURL GET请求和请求的正文

时间:2013-06-21 07:54:02

标签: php curl http-get

我正在尝试将cURL用于这样的GET请求:

function connect($id_user){
    $ch = curl_init();
    $headers = array(
    'Accept: application/json',
    'Content-Type: application/json',

    );
    curl_setopt($ch, CURLOPT_URL, $this->service_url.'user/'.$id_user);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $body = '{}';

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Timeout in seconds
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $authToken = curl_exec($ch);

    return $authToken;
}

当你看到我想传递$ body作为请求的正文,但我不知道它是否正确而且我实际上无法调试它,你知道是否使用{{1有GET请求吗?

因为这个enteire代码适用于POST,现在我正在尝试将此更改为GET,如您所见

5 个答案:

答案 0 :(得分:26)

CURLOPT_POSTFIELDS顾名思义,是针对POST请求的正文(有效负载)。对于GET请求,有效负载是查询字符串形式的URL的一部分。

在您的情况下,您需要使用您需要发送的参数(如果有)构造URL,并将其他选项删除为cURL。

curl_setopt($ch, CURLOPT_URL, $this->service_url.'user/'.$id_user);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);

//$body = '{}';
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
//curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

答案 1 :(得分:22)

接受的答案是错误的。 GET个请求确实可以包含一个正文。这是解决方案implemented by WordPress,例如:

curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );

编辑:为了澄清,在这种情况下,初始curl_setopt不是必需的,但没有任何伤害。包含它是为了充分说明被引用的示例代码。

答案 2 :(得分:4)

  <?php
  $post = ['batch_id'=> "2"];
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,'https://example.com/student_list.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
  $response = curl_exec($ch);
  $result = json_decode($response);
  $new=   $result->status;
  if( $new =="1")
  {
    echo "<script>alert('Student list')</script>";
  }
  else 
  {
    echo "<script>alert('Not Removed')</script>";
  }

  ?>

答案 3 :(得分:0)

对于那些遇到类似问题的人,this request library允许您在php应用程序中发出外部HTTP请求。简化的GET,POST,PATCH,DELETE和PUT请求。

示例请求如下

<xsl:template match="MAX/MSISDN">
    <msisdn>
        <xsl:value-of select="concat('9', .)"/>
    </msisdn>
</xsl:template>

相同文档可在项目的README.md

中找到

答案 4 :(得分:-1)

你使用

以正确的方式完成了它
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);

但我注意到你遗失了

curl_setopt($ch, CURLOPT_POST,1);