PHP cURL GET 请求和请求的正文

2022-08-30 09:25:02

我正在尝试使用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作为请求的正文,但我不知道它是否正确,我实际上无法调试它,你知道是否有权与GET请求一起使用吗?curl_setopt($ch, CURLOPT_POSTFIELDS,$body);

因为这个enteire代码与POST完美配合,现在我正在尝试将其更改为GET,如您所见


答案 1

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

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

编辑:为了澄清,在这种情况下,初始值是必要的,因为libcurl在使用时会默认HTTP方法(参见文档)。curl_setoptPOSTCURLOPT_POSTFIELDS


答案 2

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

在您的例子中,您需要使用需要发送的参数(如果有)构造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);

推荐