通过PHP CURL发送帖子数据

时间:2014-07-28 21:06:44

标签: php curl

我对此代码有疑问:

function phpbbCurlLogin($username, $password) {

    $url = WEB_INDEX . '/forum/ucp.php';

    $postdata = sprintf(
        "mode=login&login=Login&username=%s&password=%s&redirect=%s"
        , $username
        , $password
        , WEB_INDEX
    );

    $cu = curl_init();
    curl_setopt($cu, CURLOPT_URL, $url);
    curl_setopt($cu, CURLOPT_POST, 1);
    curl_setopt($cu, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cu, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($cu, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($cu, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($cu, CURLOPT_HEADER, 0);

    $result = curl_exec($cu);
    curl_close($cu);

    return $result;
}

它在localhost上运行正常,但在服务器上运行不正常。服务器版本根本不返回任何内容(没有错误,没有警告。没什么。)

奇怪的部分是:如果我删除这两行:

curl_setopt($cu, CURLOPT_POST, 1);
curl_setopt($cu, CURLOPT_POSTFIELDS, $postdata);

然后服务器版本将返回内容。但是如果没有帖子数据,这个功能就变得毫无用处。

这里可能有什么问题?为什么我无法发送帖子数据?有什么想法吗?

P.S。我不确定此信息是否有用,但localhost运行在 PHP 5.3.10-1ubuntu3.13 ,而服务器有 PHP 5.2.17

1 个答案:

答案 0 :(得分:0)

不要构建自己的POST字符串。如果没有你的帮助,Curl可以完美地完成它:

$postdata = array(
  'mode' => 'login',
  'login' => 'Login'
  'username' => $username,
  'password' => $password,
  'redirect' => WEB_INDEX
);


curl_setopt($cu, CURLOPT_POSTFIELDS, $postdata);

如果您取消_POST_POSTFIELDS选项,那么curl将默认执行GET请求,您可能只是获取登录表单的html 。如果在使用POST时出现空白页面,则应启用PHP error_reporting和display_errors选项,和/或检查服务器日志以查看爆炸情况。白页=出了点问题,并且PHP已经配置为没有说出任何内容。