我试图从以前的POST请求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它上面最终还是在内部做一个POST不完整的POST头就搞定了。 问题是,它认为它做一个GET但最终把一个POST头没有内容长度参数和连接失败戕411错误。
确保你把你的查询字符串在您的网址的结尾做一个GET请求时。
$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;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead
of passing it in the 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等于] TRUE
重置 HTTP请求方法来获取。
由于得到的是默认的,这仅仅是必要的,如果请求的方法已经改变。
调用curl_exec之前加入这个($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
解决:问题就出在这里:
我设置POST
同时通过_CUSTOMREQUEST
和_POST
和_CUSTOMREQUEST
坚持为POST
而_POST
切换到_HTTPGET
。 服务器假设从标题_CUSTOMREQUEST
是正确的,带回来一个411。
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
默认情况下,卷曲的请求是GET,你没有设置任何的选项,使一个GET请求,卷曲。