我对此代码有疑问:
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
答案 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已经配置为没有说出任何内容。