0

我正在尝试使用 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 请求一起发送以创建新主题,但它显示会话无效。

这里可能出了什么问题?

4

1 回答 1

1

我冒险猜测这是因为你执行

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

登录后,然后发布之前。您想删除这两行并继续使用相同的 curl 句柄。

顺便说一句:您的 phpbb 登录代码对我来说很好用... ;)

于 2012-09-11T09:04:30.493 回答