|
HTTPСоединение и POST авторизация | ☑ | ||
---|---|---|---|---|
0
oslokot
10.06.14
✎
15:49
|
Не получается авторизоваться на страничке сайта.
Используется POST-авторизация. Подозреваю, что я наворочал с заголовками.. Вот код на примере мисты: АдресСервера = "dev.mista.ru"; СтрокаЛогин = "user"; СтрокаПароль = "pass"; // Формирование заголовков запроса Заголовки = Новый Соответствие; Заголовки.Вставить("POST /users.php HTTP/1.1"); Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); Заголовки.Вставить("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3"); Заголовки.Вставить("Accept-Encoding", "gzip,deflate,sdch"); Заголовки.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"); Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); Заголовки.Вставить("Connection", "Keep-alive"); Заголовки.Вставить("Host", АдресСервера); // Установка соединения с сервером Соединение = Новый HTTPСоединение(АдресСервера); // Далее, пытаюсь авторизоваться Запрос = Новый HTTPЗапрос("users.php?user_name="+СтрокаЛогин+"&user_password="+СтрокаПароль, Заголовки); Ответ = Соединение.ОтправитьДляОбработки(Запрос, ИмяФайлаЗапроса); // Теперь я хочу войти на страничку пользователя Запрос = Новый HTTPЗапрос("index.php?user_id=84363"); Соединение.Получить(Запрос, ИмяВходящегоФайла); // ФИг там // В полученном файле "Страница доступна только зарегистрированным пользователям" Что я делаю не так? Может есть у кого рабочие примеры? |
|||
1
acsent
10.06.14
✎
15:50
|
ты ему пост - он тебе куки,
Ты ему куки и гет - он тебе файл |
|||
2
oslokot
10.06.14
✎
15:54
|
(1) Заголовки ответа поста в гет? Пробовал, не получается. Так?:
Запрос = Новый HTTPЗапрос("index.php?user_id=84363"); Соединение.Получить(Запрос, ИмяВходящегоФайла, Ответ.Заголовки); |
|||
3
oslokot
10.06.14
✎
16:00
|
+ а, вот так наверное?
Запрос = Новый HTTPЗапрос("index.php?user_id=84363", Ответ.Заголовки); Но теперь требует размер запроса "411 Length Required" Пробую перед запросом вставить Ответ.Заголовки.Вставить("Content-Length", 100); Пофиг, не видит |
|||
4
Dolphinbet
10.06.14
✎
16:13
|
(3) а зачем все заголовки ответа передавать? нужно только куки
|
|||
5
oslokot
10.06.14
✎
16:23
|
(4) пробовал подсовывать только полученные куки. Безрезультатно.
Есть у кого живой пример? |
|||
6
Dolphinbet
10.06.14
✎
18:01
|
(5) может сохранить в файл, вычислить размер файла и подставить полученное значение в Content-Length ?
|
|||
7
Bober
10.06.14
✎
18:40
|
(0) как вариант посмотреть как это происходит в браузере по F12
|
|||
8
acsent
10.06.14
✎
19:00
|
юзай фидлер и браузер
|
|||
9
Filin
10.06.14
✎
20:36
|
Ну, насколько я понимаю, если у тебя POST-авторизация, то логин и пароль надо передавать в теле запроса, а не в заголовках. То-есть фактически отправлять форму на сервер. Потом ты получишь ответ с куками, где будет сессия, и при использовании того-же соединения, просто отправляешь запросы. Куки, теоретически, должны ходить автоматом.
|
|||
10
oslokot
11.06.14
✎
09:23
|
(8) о, спасибо! фидлер мне в помощь, а я и запамятовал.
|
|||
11
oslokot
11.06.14
✎
09:25
|
Позже отпишу о результате
|
|||
12
oslokot
17.06.14
✎
10:21
|
Всем привет. Во всем разобрался. Все оказалось как всегда просто.
Если кому интересно, выкладываю свой код авторизации на примере мисты.ру // Убрать http-протоколы из доменного имени АдресСервера = СтрЗаменить(АдресСервера, "http://", ""); АдресСервера = СтрЗаменить(АдресСервера, "https://", ""); АдресСервера = СтрЗаменить(АдресСервера, "/", ""); Соединение = Новый HTTPСоединение(АдресСервера); // Создать файлы запроса и получения ВремКаталог = КаталогВременныхФайлов() + "tempParser"; СоздатьКаталог(ВремКаталог); УдалитьФайлы(ВремКаталог,"*.*"); ИмяВыходногоФайла = "" + ВремКаталог + "\answer.html"; ИмяФайлаОтправки = "" + ВремКаталог + "\request.html"; // Подготовить файл для POST запроса POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF8,, Истина, Символы.ПС); POSTПараметры.Записать("user_name=" + Логин + "&user_password=" + Пароль + "&action=do_enter"); POSTПараметры.Закрыть(); // Определить заголовки POST, используя алгоритм "application/x-www-form-urlencoded" POSTЗаголовки = Новый Соответствие(); POSTЗаголовки.Вставить("POST "+АдресСтраницыАвторизации+" HTTP/1.1"); POSTЗаголовки.Вставить("Host", АдресСервера); POSTЗаголовки.Вставить("Referer", "http://"+АдресСервера); POSTЗаголовки.Вставить("Connection", "keep-alive"); POSTЗаголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); // Отправляем POST запрос Попытка ОтветHTTP = Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСтраницыАвторизации, ИмяВыходногоФайла, POSTЗаголовки); Исключение Сообщить("Неудачная попытка соединения с " + АдресСервера + ": " + ОписаниеОшибки()); Возврат; КонецПопытки; // Получим ресурс на который нас перебросил сервер Если ОтветHTTP.КодСостояния = 302 Тогда АдресСтраницы = ОтветHTTP.Заголовки["Location"]; КонецЕсли; // Определить заголовки GET, с куками полученными от сервера GETЗаголовки = Новый Соответствие(); GETЗаголовки.Вставить("Cookie", ОтветHTTP.Заголовки["Set-Cookie"]); GETЗаголовки.Вставить("Connection", "keep-alive"); // Получаем страницу, указывая куки ОтветHTTP = Соединение.Получить(АдресСтраницыРассылки, ИмяВыходногоФайла, GETЗаголовки); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |