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


83

我尝试从先前的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操作,但最终放置了没有content-length参数的POST标头,并且连接失败并出现411错误。


3
小心获取请求。Google与他们在一起很开心。;)
NotMe,2009年

10
@Chris-一位朋友发现,当他建立一个通过GET请求管理用户提供的内容的网站时,这很困难。Googlebot很高兴地跟踪了所有“删除”链接,并获得了可预期的结果。
Meredith L. Patterson,2009年

Answers:


109

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

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

//在此处使用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);
打印$ 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);

//将请求方法设置为POST
curl_setopt($ ch,CURLOPT_POST,1);

//在此处使用CURLOPT_POSTFIELDS设置查询数据
curl_setopt($ ch,CURLOPT_POSTFIELDS,$ qry_str);

$ content = trim(curl_exec($ ch));
curl_close($ ch);
打印$ content;

从说明curl_setopt()文档CURLOPT_HTTPGET(强调):

[设置CURLOPT_HTTPGET等于]TRUE复位HTTP请求方法得到的。
由于GET是默认设置,因此只有在更改了请求方法的情况下才需要这样做。


3
这是设置51秒超时的一种非常邪恶的方法!
杰克·古森

不错@JackGoossen!
RC。

55

在调用curl_exec($ curl_handle)之前添加它

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

39

解决:问题出在这里:

我将POST通过双方_CUSTOMREQUEST_POST_CUSTOMREQUEST持续的POST同时_POST切换到_HTTPGET。服务器假定标头来自_CUSTOMREQUEST,然后返回411。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.