Начиная личный разговор с человеком на форумах, используя a pi forumrunner?
У меня возникли проблемы при попытке отправить пользователю на форуме сообщение с использованием API-интерфейса форума внешне.
Мне удалось успешно войти с этим кодом:
function login($username, $password){
$postdata = "cmd=login&username=".$username."&password=".$password;
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://forums.<<<website>>>.org/forumrunner/request.php', false, $context);
$resultantArray = json_decode($result, true);
if($resultantArray['success'] == true){
$this->loginresult=$resultantArray;
return true;
} else {
$this->loginresult=false;
return false;
}
}
Результат:
array(5) { ["success"]=> bool(true) ["data"]=> array(6) { ["username"]=> string(8) "<<<Username>>>" ["authenticated"]=> bool(true) ["v"]=> string(5) "1.1.1" ["p"]=> string(5) "xen10" ["requires_authentication"]=> bool(false) ["reg"]=> bool(true) } ["ads"]=> int(0) ["pm_notices"]=> int(0) ["sub_notices"]=> int(0) } string(4395) "
Так что это работает и отправляет обратно сообщение об успешном входе в систему, но этот код для начала нового разговора не работает (ошибка аутентификации):
function sendPM($recipients, $title, $message) {
$postdata = "cmd=start_conversation&recipients=".$recipients."&title=".$title."&message=".$message."&d=1";
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://forums.<<<website>>>.org/forumrunner/request.php', false, $context);
$resultantArray = json_decode($result, true);
if($resultantArray['success'] == true){
$this->pmresult=$resultantArray;
return true;
} else {
$this->pmresult=$result;
return false;
}
}
И ошибка (важная часть):
{"success":false,"message":"You do not have permission to view this page or perform this action."}
Я считаю, что мне нужно передать какой-то токен безопасности вместе с ним, но я не знаю, где его взять.
1 ответ
Вы используете PHP в качестве веб-клиента (например, Firefox или Chrome), но это не браузер. Он не поддерживает куки по умолчанию.
Давайте предположим, что вы используете браузер сейчас. Обычно после входа на сайт сайт передает вам какой-то токен (например, идентификатор сессии, имя пользователя). Токены будут сохранены в файле cookie вашего браузера. И каждый раз, когда вы что-то делаете на сайте, ваш браузер передает этот токен сайту. Таким образом, сайт будет знать вашу регистрационную информацию каждый раз (после авторизации).
Теперь ваша программа должна делать то же самое, но PHP не делает это автоматически. Вам нужно либо:
написать свой собственный код для чтения, хранения и записи cookie в заголовок вашего запроса / ответа.
поиск в Интернете и найти соответствующие библиотеки, если таковые имеются.
Я предлагаю вам прочитать некоторые связанные обсуждения, такие как:
https://forums.digitalpoint.com/threads/how-to-make-a-php-robot-that-can-log-in.2410778/