|
POST запрос, авторизация на exist.ru | ☑ | ||
---|---|---|---|---|
0
prorokk
03.08.14
✎
20:32
|
Добрый вечер
Нужно пройти авторизацию на exist.ru 1) Браузер отправляет POST в ответ получет Status Code:302 Found 2) Преходим на страничку личного кабинета Делаю в 1с Код версия 1xxxx: <code> Соединение = Новый HTTPСоединение("exist.ru"); Источник = КаталогВременныхФайлов() + "req.tmp"; Результат = КаталогВременныхФайлов() + "answ.tmp"; ЗапросПОСТ = Новый ЗаписьТекста(Источник, КодировкаТекста.ANSI, Символы.ВК + Символы.ПС, Ложь); ЗапросПОСТ.ЗаписатьСтроку("login="+LOGIN+"&pass="+PASS+"&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1"); ЗапросПОСТ.Закрыть(); ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("POST /profile/login.aspx HTTP/1.1"); ЗаголовокHTTP.Вставить("Host: exist.ru"); ЗаголовокHTTP.Вставить("Connection: keep-alive"); ЗаголовокHTTP.Вставить("Content-Length: 773"); ЗаголовокHTTP.Вставить("Cache-Control: max-age=0"); ЗаголовокHTTP.Вставить("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); ЗаголовокHTTP.Вставить("Origin: http://exist.ru"); ЗаголовокHTTP.Вставить("User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 OPR/23.0.1522.60"); ЗаголовокHTTP.Вставить("Content-Type: application/x-www-form-urlencoded"); ЗаголовокHTTP.Вставить("DNT: 1"); ЗаголовокHTTP.Вставить("Referer: http://exist.ru/profile/login.aspx"); ЗаголовокHTTP.Вставить("Accept-Encoding: gzip,deflate,lzma,sdch"); ЗаголовокHTTP.Вставить("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); ЗаголовокHTTP.Вставить("Cookie: _vs=3074072b-7829-42c7-ad22-719de4fb8a6e; _sc=401ta5yn3unkvqfl24eenm0u; _md=0; _go=44; _gd=66; __utma=253479517.1334500211.1406968671.1407009254.1407081839.7; __utmb=253479517.4.10.1407081839; __utmc=253479517; __utmz=253479517.1406968671.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"); Ответ = Соединение.ОтправитьДляОбработки(Источник, "/profile/login.aspx", Результат, ЗаголовокHTTP); Сообщить(Ответ.КодСостояния); <code> В ответ получаю Состояние 400 (путь не найден) Если Уменьшить ЗаголовокHTTP до пары строк то код 200... Прошу помощи... Нужно пройти авторизацию... |
|||
1
prorokk
03.08.14
✎
20:36
|
В процессе пляски с бубном и Методом Соединение.Получить()
Получилось получить ответ 302, который вел на страничку личного кабинета, но там было написано... "Ошибка авторизации, почитайте тут" а далее рассказ как чистить куки |
|||
2
kokamoonga
03.08.14
✎
20:36
|
(0) убирай по одной строке, чтобы локализовать проблему.
|
|||
3
prorokk
03.08.14
✎
20:39
|
(2)
ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("POST /profile/login.aspx HTTP/1.1"); ЗаголовокHTTP.Вставить("Host: exist.ru"); Дальше хоть какую строчку добавляю > Путь в ошибку. |
|||
4
prorokk
03.08.14
✎
20:40
|
Может у кого есть Проверенный код авторизации POST-ом, а то в сети одни и теже статьи..
|
|||
5
kokamoonga
03.08.14
✎
20:45
|
(1) Рассказ как чистить куки он неспроста там появился. Куки-то нужно не от балды ставить, а соответствующие сессии.
|
|||
6
prorokk
03.08.14
✎
20:51
|
(5) Подскажи я правильно думаю?
1) Соединение.Получить() - Это GET? 2) Соединение.ОтправитьДляОбработки() - Это POST Так вот, куки мне "придут" в ответе от сервера и они буду хранится в HTTPСоединение (что-бы сессия поддерживалась) То что я привел в (0) это полный Заголовок POST-а взятый в OPERA, даже если я уберу ЗаголовокHTTP.Вставить("Cookie:.... Ничего не изменится... те же ошибки теже статусы... |
|||
7
Torquader
03.08.14
✎
20:59
|
(6) Для авторизации обычно выдаётся "билет", то есть Cookie, в момент запроса кода страницы авторизации, чтобы можно было посчитать количество авторизаций, а также исключить подбор.
Вот эти куки нужно передать вместе с данными формы авторизации, после чего могут быть установлены или эти или другие Cookie для отслеживания созданной сессии. Найти логирующий Proxy и зайди на сайт через него - сразу будет ясно, что и как передаётся. |
|||
8
kokamoonga
03.08.14
✎
21:00
|
(6) вообще 400 это Bad Request
|
|||
9
kokamoonga
03.08.14
✎
21:01
|
(6) а в куках может быть записана какая-то хитрая внутрення переадресация
|
|||
10
prorokk
03.08.14
✎
21:04
|
тогда так получается?
1) Зашел на сайт получил куки1 2) Прохожу авторизацию отправляю куки1 3) Получаю куки2 4) юзаю куки2 И как 1с-кой получить КУКИ1? |
|||
11
kokamoonga
03.08.14
✎
21:05
|
(9) + или просто захэшированы параметры предыдущего обращения в части юзер-агента и прочих вещей позволяющих идентифицировать пользователя
|
|||
12
kokamoonga
03.08.14
✎
21:11
|
Попробуй получить страницу в ПолеHTMLДокумента, заполнить нужные поля и сделать submit
Заодно можешь залоггировать все что ходит туда-обратно |
|||
13
prorokk
03.08.14
✎
21:16
|
(12) Избегаю ПолеHTMLДокумента...(
(7) спасибо за идею с "логирующий Proxy" что-то запрос от 1с не похож на то что Opera шлет... буду искать причины |
|||
14
kokamoonga
03.08.14
✎
21:19
|
(13) >>> Избегаю ПолеHTMLДокумента
Есть на то какие-то причины? |
|||
15
prorokk
03.08.14
✎
22:06
|
(14)только мнения других людей о его "глючности"
с Заголовком такая беда: ЗаголовокHTTP.Вставить("Content-Type: application/x-www-form-urlencoded"); при этом в poste из 1с уже есть Content-Type: application/octet-stream Откуда он берется? |
|||
16
prorokk
03.08.14
✎
22:51
|
Итак POST
в 1с-ом не хватает Content-Type: application/x-www-form-urlencoded вместо него 1с-ка пихает Content-Type: application/octet-stream и Accept-Encoding: gzip,deflate,lzma,sdch и Лишнее Proxy-Authorization: NTLM TlRMTVNTUAABAAAAt7II4gkACQAsAAAABAAEACgAAAAGA4AlAAAAD1VTRVJXT1JLR1JPVVA= и Pragma: no-cache как их исключить тоже не знаю.. |
|||
17
kokamoonga
03.08.14
✎
22:52
|
(16)
NTLM аутентификация используется по умолчанию для прокси-серверов, поддерживающих, данный способ аутентификации, и не требует дополнительных настроек, т.е. NTLM аутентификация будет использоваться, если в конструкторе объекта HTTPСоединение прокси не задан или задан, но без указания имени пользователя и пароля. Задание в конструкторе объекта HTTPСоединение прокси с указанным именем пользователя и паролем отключает NTLM аутентификацию, для аутентификации в этом случае используется HTTP Basic аутентификация. |
|||
18
prorokk
03.08.14
✎
23:13
|
(17) Спасибо пробую... А сейчас Вот до чего дошли:
Для того что бы ПОСТ получил в ответ переадресацию (302) нужно в ПОСТЕ заменить Content-Type: application/octet-stream (его 1с-ка сама вставляет) на Content-Type: application/x-www-form-urlencoded "Подделал" пакет отправил его в ответ получил переадресацию, но в ней сообщение "Внимание! Авторизация не удалась" |
|||
19
kokamoonga
03.08.14
✎
23:43
|
(18) нет идей, но интересно чем закончится:)
|
|||
20
kokamoonga
03.08.14
✎
23:48
|
(19) + по коду вроде все верно, разве что не указана кодировка:
application/x-www-form-urlencoded; charset=utf-8 Но это вроде как необязательная часть. |
|||
21
Torquader
04.08.14
✎
00:06
|
Если на Windows, то можно ServerXMLHttpRequest попробовать использовать, по крайней мере, на VbScript с ним проблем не было никогда - даже сертификаты "кушал".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |