php + curl无法设置post方法

时间:2012-02-28 01:13:33

标签: php curl

我尝试使用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

2 个答案:

答案 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。