如何在PHP CURL中从POST切换到GET
我尝试从之前的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错误。
确保在执行GET请求时将查询string放在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); 打印$内容;
通过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); 打印$内容;
来自curl_setopt()
的CURLOPT_HTTPGET
文档的注意事项(强调添加):
[设置CURLOPT_HTTPGET等于]
TRUE
将HTTP请求方法重置为GET。
由于GET是默认的,所以只有在请求方法被改变时才需要。
在调用curl_exec($ curl_handle)之前添加这个
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
解决:问题在于:
我通过_CUSTOMREQUEST
和_POST
设置了POST
, _CUSTOMREQUEST
切换到_HTTPGET
时_CUSTOMREQUEST
保持为POST
。 服务器假设从_CUSTOMREQUEST
头是正确的,并回来了一个411。
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
CURL请求默认为GET,您不必设置任何选项来进行GET CURL请求。
这是一个相当不错的例子: