我尝试使用php和curl发布帖子请求。这是我的代码
//PHP 5.3.5 and curl: 7.18.2
$ch = curl_init();
if(!empty($save_cookie)){
curl_setopt($ch, CURLOPT_COOKIEJAR, $save_cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $save_cookie);
}else{
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
}
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, 'http://localhost/post.php');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $pars);
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_NOBODY, !$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postResult = curl_exec($ch);
if (curl_errno($ch)) {
return false;
}
curl_close($ch);
return $postResult;
在http://localhost/post.php中,我写了
print_r($_SERVER);
curl的结果返回总是
[REQUEST_METHOD] => GET
答案 0 :(得分:2)
删除CURLOPT_NOBODY
选项,它会起作用。或者将其放在CURLOPT_POST
行上方。
我想在尝试获取响应的标题时遇到过这种情况。设置
curl_setopt($ch, CURLOPT_NOBODY, true);
有效地指示curl
发出HEAD
请求,该请求不是POST
请求。我认为没有办法从POST
获取标题(并且只是在收到标题后丢弃连接)。作为副作用,将CURLOPT_NOBODY
设置为false
会将请求类型设置为GET
...
你真的需要 CURLOPT_NOBODY
旗帜吗?
答案 1 :(得分:2)
尝试移动
curl_setopt($ch, CURLOPT_NOBODY, !$body);
在
之前 curl_setopt($ch, CURLOPT_POSTFIELDS, $pars);
线。
curl/set_opt page上有一篇有趣的帖子,揭示了这种行为:
如果您的POST数据似乎正在消失(POST数据为空,请求 正在由服务器作为GET处理),尝试重新排列顺序 使用CURLOPT_NOBODY进行CURLOPT_POSTFIELDS设置。 CURLOPT_POSTFIELDS有 在CURLOPT_NOBODY设置之后来,因为它是在它之后 擦除告诉你的URL目标的标题 请求是POST而不是GET。