我正在尝试使用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很好,我知道我发送的sid
参数与我的POST请求是正确的,因为它与数据库中的相同。但是,当我运行此代码时,phpBB会发出此错误:Invalid Session. Please resubmit the form.
。
我不明白。我在登录后抓取cookie,发送POST请求创建一个新主题,但它表示无效会话。
这里可能出现什么问题?
答案 0 :(得分:1)
我猜测这是因为你执行了
curl_close($curl);
$curl = curl_init();
登录后,在发布之前。您想删除这两行并继续使用相同的卷曲句柄。
BTW:你的phpbb登录代码很适合我......;)