如何在 PHP CURL 中从 POST 切换到 GET

2022-08-30 07:48:43

我已尝试从以前的 Post 请求切换到 Get 请求。它假设它是一个Get,但最终做了一个帖子。

我在PHP中尝试了以下内容:

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);

我错过了什么?

其他信息:我已经有一个设置为执行 POST 请求的连接。这成功完成,但后来当我尝试重用连接并使用上面的setopts切换回GET时,它仍然最终在内部使用不完整的POST标头进行POST。问题是它认为它正在做一个GET,但最终放置了一个没有内容长度参数的POST标头,并且连接失败并显示411错误。


答案 1

确保在执行 GET 请求时将查询字符串放在 URL 的末尾。

$qry_str = "?x=10&y=20";
$ch = curl_init();

// Set query data here with the URL
curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$content = trim(curl_exec($ch));
curl_close($ch);
print $content;

使用 POST,您可以通过CURLOPT_POSTFIELDS选项传递数据,而不是在CURLOPT__URL传递数据。

$qry_str = "x=10&y=20";
curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

// Set request method to POST
curl_setopt($ch, CURLOPT_POST, 1);

// Set query data here with CURLOPT_POSTFIELDS
curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str);

$content = trim(curl_exec($ch));
curl_close($ch);
print $content;

curl_setopt() 文档中的注释(着重号是后加的):CURLOPT_HTTPGET

[将CURLOPT_HTTPGET设置为] 以将 HTTP 请求方法重置为 GET。
由于 GET 是默认值,因此仅当请求方法已更改时才需要这样做。TRUE


答案 2

在调用 curl_exec($curl_handle) 之前添加此内容

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');

推荐