|   |   | 
| 
 | 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 с ним проблем не было никогда - даже сертификаты "кушал".     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |