Всем доброго времени суток!
На сайте платежного шлюза при запросе расчета комиссии отправление с карты на карту, отправляются следующие данные: sPan, rPan, amount и собственно говоря токен. Вопрос в следующем, каким образом его можно получить/сгенерировать и тд. Попробовал поискать в коде страницы, но там совершено другой токен. Заранее извинюсь за глупый вопрос, если он таковым покажется.
P.S Скриншоты для наглядности:
Токен в коде страницы:
Токен в запросе:
задан 18 июн 2020 в 17:27
2
Во вкладке Initator ( чуть правее Headers, которая на скрине ) есть стек скриптов, придеться используя breakpoints или logpoint пройти до места где генерируеться этот токен, но путь этот может быть тернист и сложен =)
Сам токен может быть создан как угодно и для чего угодно, сервер может кстати и проигнорировать его отсутсвие или правильность, поэтому для начала стоит убедиться в его необходимости.
Возможно токен с первого скрина верный, сервер может генерировать новый токен каждый раз когда отдает страницу, т.е. если первый и второй скрин относяться к разным запросам, тогда нормально, что они разные.
ответ дан 18 июн 2020 в 18:01
lijillijil
3321 серебряный знак6 бронзовых знаков
2
В общем это мой первый код,столкнулся с проблемой,что на сайте где мне нужна авторизация есть csrf токен
Строка в HTML выглядит так:
<meta name="csrf-token" content="LEHb0gOOweqUBc6dBfMmqAW5VN9y9tTXEep1AGIhsL1OMYyfQvqtvtlu-MdKhm3nbcktiiagnockvgBjGm3jzw==">
мне нужно эту строку с токеном найти в моем коде и вставить
import requests
from bs4 import BeautifulSoup
file = open('1.txt').read().split('n')
url = 'https://fastmoney.ru/auth/login'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
session = requests.Session()
session.headers.update(headers)
r = session.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
csrf = soup.find('meta', {'name': 'csrf-token'})['content']
for account in file:
username = account.split(":")[0]
password = account.split(":")[1]
resp = requests.post(url, data = {'_csrf': csrf, 'LoginForm[login]': username, 'LoginForm[password]': password,})
Первый раз занимаюсь этим,поэтому не бейте сильно.Думаю для знающих будет очень просто помочь мне)
Данный раздел демонстрирует получение авторизационного токенa приложениями.
Примечание. Рекомендации для различных типов приложений (настольное, мобильное и др.) приведены в руководстве по OAuth-авторизации.
При регистрации или редактировании параметров приложения на OAuth-сервере Яндекса необходимо в поле Callback URI указать URL скрипта, выполняющего получение токена. Например:
http://site.ru/get_token.php
Код скрипта приведен ниже.
При запросе токена требуется указывать идентификатор и пароль приложения, сгенерированные при регистрации на OAuth-сервере.
-
Приложение перенаправляет пользователя по ссылке вида
https://oauth.yandex.ru/authorize?response_type=code&client_id=<идентификатор_приложения>
На открывшейся странице пользователь нажимает кнопку Разрешить.
-
OAuth-сервер Яндекса осуществляет редирект на адрес из Callback URI. При этом к адресу добавляется параметр
code
. Например:http://site.ru/get_token.php?code=<код_подтверждения>
-
Скрипт выполняет POST-запрос на https://oauth.yandex.ru/token, передавая следующие параметры:
-
grant_type = authorization_code
-
code
= <код_подтверждения> -
client_id
= <идентификатор_приложения> -
client_secret
= <пароль_приложения>
-
-
OAuth-сервер передает ответ в формате JSON. Ключ
access_token
содержит OAuth-токен. Например:{"access_token": "ea135929105c4f29a0f5117d2960926f"}
Полученный токен необходимо сохранить и использовать в запросах к API Директа.
# -*- coding: utf-8 -*-
from bottle import route, run, request
import httplib
import urllib
import json
#Идентификатор приложения
client_id = 'YOUR_CLIENT_ID'
#Пароль приложения
client_secret = 'YOUR_CLIENT_SECRET'
@route('/')
def index():
#Если скрипт был вызван с указанием параметра "code" в URL,
#то выполняется запрос на получение токена
if request.query.get('code'):
#Формирование параметров (тела) POST-запроса с указанием кода подтверждения
query = {
'grant_type': 'authorization_code',
'code': request.query.get('code'),
'client_id': client_id,
'client_secret': client_secret,
}
query = urllib.urlencode(query)
#Формирование заголовков POST-запроса
header = {
'Content-Type': 'application/x-www-form-urlencoded'
}
#Выполнение POST-запроса и вывод результата
connection = httplib.HTTPSConnection('oauth.yandex.ru')
connection.request('POST', '/token', query, header)
response = connection.getresponse()
result = response.read()
connection.close()
#Токен необходимо сохранить для использования в запросах к API Директа
return json.loads(result)['access_token']
#Запускаем веб-сервер
run(host='localhost', port=80, quiet=True)
<?php
// Идентификатор приложения
$client_id = 'YOUR_CLIENT_ID';
// Пароль приложения
$client_secret = 'YOUR_CLIENT_SECRET';
// Если скрипт был вызван с указанием параметра "code" в URL,
// то выполняется запрос на получение токена
if (isset($_GET['code']))
{
// Формирование параметров (тела) POST-запроса с указанием кода подтверждения
$query = array(
'grant_type' => 'authorization_code',
'code' => $_GET['code'],
'client_id' => $client_id,
'client_secret' => $client_secret
);
$query = http_build_query($query);
// Формирование заголовков POST-запроса
$header = "Content-type: application/x-www-form-urlencoded";
// Выполнение POST-запроса и вывод результата
$opts = array('http' =>
array(
'method' => 'POST',
'header' => $header,
'content' => $query
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://oauth.yandex.ru/token', false, $context);
$result = json_decode($result);
// Токен необходимо сохранить для использования в запросах к API Директа
echo $result->access_token;
}
?>
Если нужна помощь в настройке веб-аналитики на сайте, обращайтесь. Мои услуги здесь.
Прежде чем работать с API какого-либо интернет-сервиса, нужно получить специальный ключ, его еще называют токен.
Это уникальное текстовое значение, которое выдается каждому пользователю, для возможности им подтвердить, что это именно он соединяется с API и что у него есть на это право.
Если у нас есть токен, то мы имеем полный доступ к тому приложению, к которому обращаемся и можем там делать все, что угодно.
Поэтому, существует такая мера безопасности и прежде чем работать с API, нужно получить специальный токен.
Яндекс.Метрика не является исключением и, чтобы начать работать с ее API, нам нужно получить этот самый токен.
Как же его можно получить?
Чтобы это сделать, нужно выполнить 2 шага.
1 шаг. Переходим по адресу:
oauth.yandex.ru
Входим в свой аккаунт Яндекс и у вас откроется страница, где вы можете зарегистрировать свое приложение.
Приложение – это условный мини-аккаунт, с помощью которого вы можете получить этот токен и в дальнейшем им пользоваться.
Жмем на “Зарегистрировать новое приложение” подробнее см. видео.
Указываем название приложения.
В разделе Платформы – выбираем веб-сервисы и выбираем подставить URL для разработки.
Спускаемся ниже и ставим галочки в разделе Яндекс Метрика.
После этого нажимаем на кнопку “Создать приложение”.
Когда оно будет создано, вы получите ID приложения.
Шаг 2. Открываем новую вкладку и переходим по адресу:
https://oauth.yandex.ru/authorize?response_type=token&client_id=XXXXXX
В этот адрес вам нужно вместо XXXXXX подставить ID вашего приложения, которое вы только что создали.
Остается только нажать на “Разрешить” и мы получаем тот самый токен, который нам нужен. Скопируйте его в надежное место, в дальнейшем он вам еще понадобиться.
Такая процедура получения токена в системе Яндекс Метрика.
Если хотите продолжить знакомиться с API Яндекс Метрики, жмите на Содержание или Далее.
Если нужна помощь в настройке веб-аналитики на сайте, обращайтесь. Мои услуги здесь.
Токен не существует сам по себе, а выдается приложению от имени чьего-то аккаунта в Яндексе. Таким образом владелец аккаунта разрешает этому приложению доступ к определенным операциям со своим аккаунтом. Токен является реализацией такого разрешения.
1. Регистрируем приложение
Заполняем форму на https://oauth.yandex.ru/client/new. Обязательно сделать следующее:
- указать название приложения (например, “watches.ru site engine”)
- в разделе Callback URI нажать “Подставить URL для разработки”, в поле возникнет адрес от Яндекса
- среди доступов найти нужный раздел (например, для Яндекс.Маркета и Беру.ру это Яндекс.Маркет).
После отправки формы отобразится страница с параметрами приложения, отсюда нужно взять его идентификатор и пароль.
В дальнейшем доступ к этим данным осуществляется по адресу https://oauth.yandex.ru/client/<id приложения>
. Страница будет доступна только тому аккаунту, от имени которого было создано приложение (создать приложения без аккаунта в Яндексе нельзя).
2. Разрешаем приложению доступ – получаем токен
-
Заходим на Яндекс с учетной записью пользователя, к аккаунту которого приложение должно запросить доступ.
(Он может отличаться от аккаунта, из-под которого было создано приложение, но может и совпадать.) -
Взять идентификтор приложения, подставить его в адрес
https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
и открыть страницу. Нажать Разрешить. -
Прямо на странице будет отображен новый токен. Его нужно куда-то сохранить, т.к. как его посмотреть потом – пока неизвестно.
А в адресе в параметре expires – время жизни в секундах (например, для приложения с доступом к Яндекс.Маркету это один год).
Эти процедуры подробно описаны здесь: https://tech.yandex.ru/oauth/doc/dg/tasks/get-oauth-token-docpage/
3. Отправляем токен с HTTP-запросами
В состав запросов токен включается с помощью заголовка Authorization: Oauth
, куда входит также идентификатор приложения:
Authorization: OAuth oauth_token="авторизационный_токен", oauth_client_id="идентификатор_приложения"
См. https://yandex.ru/dev/market/partner-marketplace-cd/doc/dg/concepts/authorization-docpage/