Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37

Передать csrftoken вручную

30.09.2013, 01:12. Показов 1645. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Пишу софтину для авторизации и последующего парсинга нужного мне сайта. Проблема в следующем: на сайте есть защита от CSRF, и поэтому csrftoken и sessionid необходимо передавать в POST-запросе вручную.
Вот такой POST-запрос получается при авторизации на сайте через браузер:
Кликните здесь для просмотра всего текста

POST site.ru/login/ HTTP/1.1
Host: site.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://site.ru/login/
Cookie: csrftoken=значение_токена; sessionid=значение_сессии
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 112

csrfmiddlewaretoken=значение_токена&username=логин&password=пароль

Ответ сервера: HTTP/1.1 302 FOUND

Составленный POST-запрос в программе:
Кликните здесь для просмотра всего текста

TStringList *LoginInfo = new TStringList;
String Url = "http://site.ru/login/";
IdHTTP1->Request->UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0";
IdHTTP1->Request->Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
IdHTTP1->Request->AcceptLanguage = "ru,en-us;q=0.7,en;q=0.3";
IdHTTP1->Request->AcceptEncoding = "gzip, deflate";
IdHTTP1->Request->Referer = "http://site.ru/";
IdHTTP1->Request->Connection = "keep-alive";
IdHTTP1->Request->ContentType = "application/x-www-form-urlencoded";
IdHTTP1->Request->Host = "http://site.ru";
LoginInfo->Add("csrfmiddlewaretoken=значение_токен а");
LoginInfo->Add("username=логин");
LoginInfo->Add("password=пароль");


Сниффер показывает вот такой отправляемый POST-запрос при логине через программу:
Кликните здесь для просмотра всего текста

POST site.ru/login/ HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 112
Host: supply.wowgold.ru
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, identity
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Referer: http://site.ru/login/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0

csrfmiddlewaretoken=значение_токена&user name=логин&password=пароль

Таким образом, в POST-запросе от программы отсутствует параметр
Cookie: csrftoken=значение_токена; sessionid=значение_сессии

Имеем 2 вопроса: как вы могли заметить, в POST-запросе от программы параметр HTTP/1.0, а в POST-запросе от браузера - HTTP/1.1
Как изменить на HTTP/1.1 в программе?
Ну и, собственно, как передать через POST-запрос программы параметр Cookie: csrftoken=значение_токена; sessionid=значение_сессии ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2013, 01:12
Ответы с готовыми решениями:

Где парсить параметр csrftoken instagram.com?
При отправке get запроса на страницу instagram.com из прокси ipv6 получаю ошибку 404. Нужно получить параметр csrftoken что бы вставить...

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

Передать две переменные в скрипт на PHP, а он должен передать их значения обратно в Unity приложение
Привет! При нажатии на кнопку должны отослаться две переменные в скрипт на PHP, а этот скрипт должен передать их значения обратно в...

12
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
02.10.2013, 19:48  [ТС]
Ребят, никаких идей?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
02.10.2013, 20:20
HTTP 1.0 думаю не критично - сервер что, дескреминирует пожилых пользователей?
про куки - мб напихать доп инфу в поле ExtraHeaders
1
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
02.10.2013, 23:26  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
HTTP 1.0 думаю не критично - сервер что, дескреминирует пожилых пользователей?
про куки - мб напихать доп инфу в поле ExtraHeaders
Помогло, спасибо. Засунул в CustomHeaders.
Появилась другая проблема. При подключении TidCookieManager к TidHTTP и включении опции AllowCookies, меня снова выбивает на 403 FORBIDDEN.
Нужно, как я понял, вручную сохранить кукисы.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
03.10.2013, 18:43
а как вы хотели?
0
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
04.10.2013, 09:46  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
а как вы хотели?
По сути же CookieManager должен принимать и сохранять куки, хотя бы на время работы программы. И он успешно это делал, когда я авторизовывался на другом сайте. А с этим работать не хочет.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
04.10.2013, 11:11
если вы передаете куки в дополнительных заголовках - как у вас менеджер если таковой имеется догадается об их существовании?
0
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
07.10.2013, 17:03  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
если вы передаете куки в дополнительных заголовках - как у вас менеджер если таковой имеется догадается об их существовании?
Верно, никак. Но при подключении менеджера программа не авторизуется, вываливая ошибку.
И дело ещё в самих куках. Менеджер умеет их хранить в определённом формате, исключая всякий, по его мнению, "мусор". А как раз этот "мусор" и нужен для авторизации.
Например, у меня кука принимает вид
Кликните здесь для просмотра всего текста
Set-Cookie: sessionid=ид_сессии; expires=Fri, 18-Oct-2013 07:03:26 GMT; httponly; Max-Age=1209600; Path=/

А менеджер их так не сохраняет, обрубая примерно вот эти значения
Кликните здесь для просмотра всего текста
expires=Fri, 18-Oct-2013 07:03:26 GMT; httponly; Max-Age=1209600;

После чего авторизация не проходит успешно, куки не сохраняются и меня выбрасывает на страницу логина.
Как я понял, куки нужно дёргать при авторизации, грузить в переменную и при каждом рефреше страницы подставлять в IdHTTP, верно?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
07.10.2013, 18:42
честно, ни разу не пробовал. если вы знаете что можно сделать это руками - думаю так оно и поедет
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.10.2013, 03:15
https://www.cyberforum.ru/blog... 8.html#a_7
https://www.cyberforum.ru/post235829.html

Добавлено через 6 минут
Если дашь ссылку на сайт и логин/пароль в личку могу посмотреть...
1
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
08.10.2013, 09:26  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
https://www.cyberforum.ru/blog... 8.html#a_7
https://www.cyberforum.ru/post235829.html

Добавлено через 6 минут
Если дашь ссылку на сайт и логин/пароль в личку могу посмотреть...
Увы, ссылку и данные не могу. Мопед не мой
По поводу первой ссылки: напрямую с менеджером сайт не работает.
По поводу второй ссылки: у меня висит в закладках этот пост, но ещё не дошёл до его реализации. Но всё-равно спасибо.

Добавлено через 9 минут
Дело в том, что там используется несуществующая функция в 9-ой строке:
C++
1
Form1->IdHTTP1->CookieManager->AddCookie(Temp->Strings[i], Form1->IdHTTP1->Request->Host)
Существует функция AddCookies, но в параметрах она принимает (TIdCookieManager *)
Есть ещё функции AddServerCookie и AddServerCookies.
Во всяком случае у меня в XE4 студии именно так.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.10.2013, 11:34
Цитата Сообщение от erema_ironman Посмотреть сообщение
Есть ещё функции AddServerCookie и AddServerCookies.
Ну вот их и используй...

Добавлено через 36 секунд
Цитата Сообщение от erema_ironman Посмотреть сообщение
Увы, ссылку и данные не могу. Мопед не мой
На нет и суда нет...
0
 Аватар для erema_ironman
8 / 7 / 2
Регистрация: 23.04.2009
Сообщений: 37
15.10.2013, 19:15  [ТС]
Всё, топик можно закрывать.
Решение: при отправке POST-запроса сначала получаются куки, разбираются регэкспом, нужные куски сохраняются в переменную и вставляются в POST-запрос в CustomHeaders

Всем ещё раз спасибо. Дальше уже будет работа по разбору полученных данных с помощью регулярных выражений, а это уже совсем другая история
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2013, 19:15
Помогаю со студенческими работами здесь

Создание БД вручную :(((
Что-то я совсем запуталась, похоже, без Вашей помощи не обойтись. Пытаюсь создать БД Оракла вручную. Создала файл паролей,...

Gui Вручную
Мне нужно создать интерфейс без использования компилятора NetBeans. Исходник хорошо, а темка лучше. З.Ы. Благодарен за любую помощь.

Удалить вручную
Как удалить вручную эти ненужные и удаленные, но не удалились? Заранее благодарен!

reshape вручную
Помогите, пожалуйста, реализовать в ручную функцию reshape. А точнее, чтобы всё работало, когда задаёшь функцию в таком виде: reshape (A,...

Ввод функции f(x) вручную
Здравствуйте. Скажите пожалуйста - на сколько сложно реализовать ввод функции в программу вручную (не в код,а в экзешник: запустил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru