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 は Cookiesidを適切に設定します。POST リクエストで送信しているパラメータは、データベースにあるものと同じであるため、正しいことがわかります。ただし、このコードを実行すると、phpBB は次のエラーを吐き出しますInvalid Session. Please resubmit the form.

理解できません。ログイン後に Cookie を取得し、POST リクエストで送信して新しいトピックを作成していますが、無効なセッションと表示されています。

ここで何がうまくいかないのでしょうか?

4

1 に答える 1

1

あなたが実行したからだと思います

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

ログイン後、投稿前。この 2 行を削除して、同じ curl ハンドルを引き続き使用したいとします。

ところで: あなたの phpbb ログイン コードはうまく機能しました... ;)

于 2012-09-11T09:04:30.493 に答える