|
v7: POST в WinHttpRequest.5.1 | ☑ | ||
---|---|---|---|---|
0
Eeakie
22.06.15
✎
16:17
|
Хочу авторизироваться на google.com:
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2, "Windows-1251"); Адрес = "https://accounts.google.com/ServiceLogin"; ПроксиАдрес = ***; ПроксиЛогин = ***; ПроксиПароль = ***; WinHttp.SetProxy(2, ПроксиАдрес); WinHttp.Open("POST", Адрес, 0); WinHttp.SetCredentials(ПроксиЛогин, ПроксиПароль, 0); Мыло = ***; Пасс = ***; ПараметрыПОСТ = "Email=Мыло&Passwd=Пасс&PersistentCookie=no"; Попытка WinHttp.Send(ПараметрыПОСТ); Статус = СокрЛП(WinHttp.Status); Описание = СокрЛП(WinHttp.StatusText); Исключение Статус = "0"; Описание = СокрЛП(ОписаниеОшибки()); КонецПопытки; Сообщить(Статус); Сообщить(Описание); WinHttp.Open("GET", Адрес, 0); WinHttp.Send(); Стр = WinHttp.ResponseText(); Текст = СоздатьОбъект("Текст"); Текст.ДобавитьСтроку(Стр ); Текст.Записать("\\***\123.html"); Открываю 123.html и вижу страничку авторизации, где даже не заполнены email и password. Да и галка "оставаться в системе" тоже стоит. Что не так? |
|||
1
Eeakie
22.06.15
✎
16:21
|
+(0) Получаю Статус = "200" и ТекстовыйСтатус = "ОК".
|
|||
2
Serginio1
22.06.15
✎
16:36
|
Сохраняй куки
|
|||
3
Serginio1
22.06.15
✎
16:36
|
Смотри фиддлером
|
|||
4
Eeakie
22.06.15
✎
16:38
|
(3) Нет случайно внятной ссылки на эту тему?
|
|||
5
Mirnin
22.06.15
✎
16:52
|
Есть рабочий пример из одной давней обработки. WinHttpRequest использовался только для получения куки, из-за отсутствия штатных средств для этого в 8.0.
Ну и да, заголовки смотрятся фиддлером. Запускаешь, авторизуешься через браузер, смотришь, что было передано и что получено в ответ. В данном случае пришлось описывать всё, иначе не авторизовало. Win = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); Win.Open("POST", "http://www.site.ru", false); Win.SetRequestHeader("Host", "http://www.site.ru"); Win.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0"); Win.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); Win.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); Win.SetRequestHeader("Accept-Encoding", "gzip, deflate"); Win.SetRequestHeader("Referer", "http://www.site.ru/"); Win.SetRequestHeader("Connection", "keep-alive"); Win.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded"); Win.SetRequestHeader("Content-Length", "26"); Win.Send("login=login&password=password"); Cookie = Win.GetResponseHeader("Set-Cookie"); Соединение = Новый HTTPСоединение("http://www.site.ru/"); Заголовки = "User-Agent: Mozilla" + Символы.ВК + Символы.ПС + "Cookie: PHPSESSID=" + Cookie + Символы.ВК + Символы.ПС; имяВыходногоФайла = ПолучитьимяВременногоФайла("txt"); Соединение.Получить("НужныйАдрес", имяВыходногоФайла, Заголовки); |
|||
6
Serginio1
22.06.15
✎
17:03
|
||||
7
Eeakie
22.06.15
✎
17:09
|
Окей. Буду разбираться с фиддлером.
|
|||
8
trad
22.06.15
✎
17:17
|
ПроксиЛогин и ПроксиПароль - все таки для сервера или для прокси?
Если для прокси, то .SetCredentials(ПроксиЛогин, ПроксиПароль, 1); |
|||
9
Serginio1
22.06.15
✎
17:31
|
(7) Посмотри еще Отправка СМС из 1С через SMS-Fly
|
|||
10
Eeakie
23.06.15
✎
14:16
|
Всё нормально, когда через фиддлер видно POST, но наткнулся на авторизацию, где всё сделано через GET. Нихрена не понял. Каким образом проходит авторизация через GET, если я перед этим ввожу логин и пароль?
Даже с подстановкой печенек не хочет авторизироваться. Сайт для примера: http://www.myfitnesspal.com\ru |
|||
11
Eeakie
23.06.15
✎
14:21
|
Точнее будет вот https://www.myfitnesspal.com/account/login
|
|||
12
Eeakie
23.06.15
✎
14:24
|
(8) Это наш прокси-сервер. Надо 1 получается?
|
|||
13
Serginio1
23.06.15
✎
14:37
|
Настрой Fiddler для просмотра HTPS
Или ипользуй InternetExplorer.Application Из 1с нажать на кнопку HTML |
|||
14
Serginio1
23.06.15
✎
14:39
|
||||
15
Eeakie
23.06.15
✎
14:42
|
(14) Спасибо тебе, добрый человек. Буду разбираться дальше.
|
|||
16
Serginio1
23.06.15
✎
14:42
|
||||
17
beaver1971
23.06.15
✎
17:21
|
(0) Запусти и глянь результат
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2, "Windows-1251"); WinHttp.Option(0, "1C WinHTTP User Agent"); Адрес = "https://accounts.google.com/ServiceLoginAuth"; WinHttp.Open("GET", Адрес, 0); WinHttp.Send(); Reg = СоздатьОбъект("VBScript.RegExp"); Reg.IgnoreCase = 0; Reg.Global = -1; Reg.Multiline = 0; Reg.Pattern = "<[^>]*>"; ТекстСтранички = WinHttp.ResponseText(); ЧтоТоИщем = Reg.Execute(ТекстСтранички); Сколько = ЧтоТоИщем.Count(); Печать = 0; Если Сколько > 0 Тогда Для кол = 0 По Сколько - 1 Цикл ЧтоТам = ЧтоТоИщем.Item(кол); аВотЧто = ЧтоТам.Value; Если Лев(аВотЧто, 5) = "<form" Тогда Печать = 1; КонецЕсли; Если Печать = 1 Тогда Сообщить(аВотЧто); КонецЕсли; Если Лев(аВотЧто, 5) = "</for" Тогда Печать = 0; КонецЕсли; КонецЦикла; КонецЕсли; Хед = WinHttp.GetAllResponseHeaders(); Сообщить(Хед); Вот теперь из результата собери все name и value из <input>, склей их в POST запрос и отправь на action из <form> PS. Вероятность того, что в ответ придет страничка связанная с двух этапной авторизацией, очень высока |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |