Создать session_cookie из вызова API входа в систему. ⇐ Php
-
Anonymous
Создать session_cookie из вызова API входа в систему.
Я пишу PHP для создания файла cookie сеанса входа в систему. Предполагается, что он вызовет вызов POST API для входа и сохранит файл cookie сеанса.
/** * Создайте новый токен сеанса runescape.com. * @return string — токен сеанса, вход не выполнен или просто ложь */ частная функция get_session_token(){ $fields_string = ""; $fields = массив( 'имя пользователя' => urlencode($this->_pugLogin), 'пароль' => urlencode($this->_pugPassword), 'theme' => urlencode("двойной"), 'ssl' => urlencode("0"), 'flow' => urlencode("web"), 'mod' => urlencode("jpp"), 'dest' => urlencode("сообщество"), 'rejectOnGoBackRequired' => urlencode("true"), ); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } $fields_string = substr($fields_string, 0, -1); $url = "https://secure.runescape.com/m=weblogin/login-submit"; curl_setopt($this->curl, CURLOPT_URL, $url); curl_setopt($this->curl, CURLOPT_HEADER, 1); curl_setopt($this->curl, CURLOPT_POST, 1); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0); Curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields_string); Curl_setopt($this->curl, CURLOPT_REFERER, "https://secure.runescape.com/m=weblogin/login-submit"); Curl_setopt($this->curl, CURLOPT_HTTPHEADER, массив( "Принять: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", «Принять-кодирование: gzip, deflate, br», «Принять-Язык: en-GB,en-US;q=0.8,en;q=0.6», "Максимальный возраст кэш-контроля = 0", «Соединение: поддерживать активность», «Тип контента: приложение/x-www-form-urlencoded», «Происхождение: https://secure.runescape.com», «Агент пользователя: nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/55.0.2883.87», )); $result = curl_exec($this->curl); $responseCode = curl_getinfo($this->curl, CURLINFO_HTTP_CODE); if($responseCode == 302 && $result){ $session_index_start = strpos($result, 'session=') + 8; $session_index_end = strpos($result, ';', $session_index_start); $session_length = $session_index_end - $session_index_start; $session_token = substr($result, $session_index_start, $session_length); вернуть $session_token; }elseif($responseCode == 200){ вернуть «не удалось войти в систему»; }еще{ вернуть ложь; } } Я действительно получаю ответ 200. Это неверно, поскольку я пытаюсь получить ответ 302. Кто-нибудь знает, чего именно мне не хватает? Я думаю, это может быть связано с тем, что мне не хватает некоторых полей полезной нагрузки запроса. Полезная нагрузка на вкладке «Сеть» выглядит следующим образом
имя пользователя: testy@t.t пароль: test123 тема: двойная поток: сеть отклонитьOnGoBackRequired: правда goBackUrl: https://account.jagex.com/oauth2/auth?r ... e.com/jpp- авторизация/ логин/oauth2/code/jpp&nonce=__c2lKfApFji8F2NGl2aN8loGu7_Hc2dkjXJe2PKslI&flow=web Идентификатор корреляции: 41a1877d-654a-4934-88b9-0b167ea63a64::1698280054901 подпись: 8B3EC0148A5C6DF53D42B3F3218ECD7C814B0FAA4BA52018056D9FFE9F84E4EBC981946F81035E760F9773A59AC33B1D1B7AECE6EE8B69119D98420C8B768EA1 мод: JPP Место назначения: 1hoIao2uAVai5BrXvhjicM Я не знаю, как заполнить эти дополнительные поля в моем коде, поскольку они кажутся сгенерированными.
Я пишу PHP для создания файла cookie сеанса входа в систему. Предполагается, что он вызовет вызов POST API для входа и сохранит файл cookie сеанса.
/** * Создайте новый токен сеанса runescape.com. * @return string — токен сеанса, вход не выполнен или просто ложь */ частная функция get_session_token(){ $fields_string = ""; $fields = массив( 'имя пользователя' => urlencode($this->_pugLogin), 'пароль' => urlencode($this->_pugPassword), 'theme' => urlencode("двойной"), 'ssl' => urlencode("0"), 'flow' => urlencode("web"), 'mod' => urlencode("jpp"), 'dest' => urlencode("сообщество"), 'rejectOnGoBackRequired' => urlencode("true"), ); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } $fields_string = substr($fields_string, 0, -1); $url = "https://secure.runescape.com/m=weblogin/login-submit"; curl_setopt($this->curl, CURLOPT_URL, $url); curl_setopt($this->curl, CURLOPT_HEADER, 1); curl_setopt($this->curl, CURLOPT_POST, 1); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0); Curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields_string); Curl_setopt($this->curl, CURLOPT_REFERER, "https://secure.runescape.com/m=weblogin/login-submit"); Curl_setopt($this->curl, CURLOPT_HTTPHEADER, массив( "Принять: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", «Принять-кодирование: gzip, deflate, br», «Принять-Язык: en-GB,en-US;q=0.8,en;q=0.6», "Максимальный возраст кэш-контроля = 0", «Соединение: поддерживать активность», «Тип контента: приложение/x-www-form-urlencoded», «Происхождение: https://secure.runescape.com», «Агент пользователя: nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/55.0.2883.87», )); $result = curl_exec($this->curl); $responseCode = curl_getinfo($this->curl, CURLINFO_HTTP_CODE); if($responseCode == 302 && $result){ $session_index_start = strpos($result, 'session=') + 8; $session_index_end = strpos($result, ';', $session_index_start); $session_length = $session_index_end - $session_index_start; $session_token = substr($result, $session_index_start, $session_length); вернуть $session_token; }elseif($responseCode == 200){ вернуть «не удалось войти в систему»; }еще{ вернуть ложь; } } Я действительно получаю ответ 200. Это неверно, поскольку я пытаюсь получить ответ 302. Кто-нибудь знает, чего именно мне не хватает? Я думаю, это может быть связано с тем, что мне не хватает некоторых полей полезной нагрузки запроса. Полезная нагрузка на вкладке «Сеть» выглядит следующим образом
имя пользователя: testy@t.t пароль: test123 тема: двойная поток: сеть отклонитьOnGoBackRequired: правда goBackUrl: https://account.jagex.com/oauth2/auth?r ... e.com/jpp- авторизация/ логин/oauth2/code/jpp&nonce=__c2lKfApFji8F2NGl2aN8loGu7_Hc2dkjXJe2PKslI&flow=web Идентификатор корреляции: 41a1877d-654a-4934-88b9-0b167ea63a64::1698280054901 подпись: 8B3EC0148A5C6DF53D42B3F3218ECD7C814B0FAA4BA52018056D9FFE9F84E4EBC981946F81035E760F9773A59AC33B1D1B7AECE6EE8B69119D98420C8B768EA1 мод: JPP Место назначения: 1hoIao2uAVai5BrXvhjicM Я не знаю, как заполнить эти дополнительные поля в моем коде, поскольку они кажутся сгенерированными.