Имя: Пароль:
1C
1C 7.7
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
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. Вероятность того, что в ответ придет страничка связанная с двух этапной авторизацией, очень высока
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn