用PHP和cURL发布到phpBB2论坛


Posting to phpBB2 forum with PHP and cURL

我正试图用PHP和cURL发布到运行在localhost上的phpBB2论坛。我已经处理好了登录,只是发布了一个我无法理解的帖子。

这是我的代码:

<?php
$cookieFile = 'C:'xampp'htdocs'cookies''' . uniqid(true) . '.txt';
// Login
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/phpbb2/login.php');
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_POST, true);
$postVars = array('username' => 'admin', 'password' => 'password', 'autologin' => 'on', 'login' => 'Log in');
curl_setopt($curl, CURLOPT_POSTFIELDS, $postVars);
$resp = curl_exec($curl);
curl_close($curl);
// Parse sid from cookie file
preg_match('/phpbb2mysql_sid't(.*)/', file_get_contents($cookieFile), $match);
$sId = $match[1];
// Post
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://localhost/phpbb2/posting.php?mode=newtopic&f=1');
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
$postVars = array('subject' => 'Test post',
                  'message' => 'Test post, please ignore.',
                  'sid' => $sId,
                  'f' => 1,
                  'post' => 'Submit');
curl_setopt($curl, CURLOPT_POSTFIELDS, $postVars);
$resp = curl_exec($curl);
curl_close($curl);
echo $resp;

cURL将cookie设置得很好,我知道我在POST请求中发送的sid参数是正确的,因为它与数据库中的参数相同。然而,当我运行这段代码时,phpBB会抛出这个错误:Invalid Session. Please resubmit the form.

我不明白。我登录后会抓取cookie,并将其与POST请求一起发送以创建新主题,但它显示会话无效。

这里可能出了什么问题?

我大胆猜测这是因为你执行

curl_close($curl); 
$curl = curl_init();

登录后,然后发布。您希望删除这两行,然后继续使用相同的卷曲控制柄。

BTW:你的phpbb登录代码对我来说很好…;)