Имя: Пароль:
1C
1С v8
Авторизация на сайте rosrabota.ru
0 Evil-Wisp
 
09.07.18
09:04
Здравствуйте.
Нужно по ссылке вида rosrabota.ru/my-response-download-pdf/1672783
скачивать резюме. Если делать GET запрос, то сайт возвращает Location //rosrabota.ru/new/login?redirect_to=%2F%2Frosrabota.ru%2Fmy-response-download-pdf%2F1672783

Пытаюсь делать POST запрос на авторизацию и получение cookie:

АдресСервера = "rosrabota.ru";
    АдресСтраницыАвторизации = "new/login?";

    Соединение = Новый HTTPСоединение(АдресСервера);

    // Создать файлы запроса и получения
    ВремКаталог = КаталогВременныхФайлов() + "tempParser";
    СоздатьКаталог(ВремКаталог);
    УдалитьФайлы(ВремКаталог,"*.*");

    ИмяВыходногоФайла = "" + ВремКаталог + "\answer.html";
    ИмяФайлаОтправки = "" + ВремКаталог + "\request.html";

    Логин = "[email protected]";
    Пароль = "1337";

    // Подготовить файл для POST запроса

    POSTПараметры = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.UTF16,, Истина, Символы.ПС);
    POSTПараметры.Записать("user=" + Логин + "&password=" + Пароль); //login email username user
    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 = Соединение.Получить("/my-response-download-pdf/1672783", ИмяВыходногоФайла, GETЗаголовки);

В файле answer.html получаем ответ:

{"error":"<b>Авторизоваться не удалось.</b><br>\nВероятно, вы&nbsp;допустили ошибку.\nПроверьте <b>раскладку клавиатуры</b>,\nне&nbsp;нажата ли&nbsp;клавиша &laquo;<b>Caps Lock</b>&raquo;,\nи&nbsp;попробуйте ввести email и&nbsp;пароль ещё раз.\n        ","exec":null}

В ответHTTP куков нет.

На сайте форма окна авторизации
<form method="post" class="common">
          <input type="text" name="email" placeholder="Email">
          <input type="password" name="password" placeholder="Пароль">
          <div class="nowrap">
            <button type="submit" class="btn btn-green">Войти</button><a href="#" class="password-reset">Забыли пароль?</a>
          </div>
        </form>

Логин и пароль правильные. Подскажите, какие параметры можно попробовать передать, чтобы авторизация прошла
1 Evil-Wisp
 
09.07.18
09:11
Авторизацию прошел:)
Нужна была КодировкаТекста.ANSI
Параметры "email=" + Логин + "&password=" + Пароль

Дальше передал куки, пока не цепляет, перенаправляет снова.
2 Звездец
 
09.07.18
09:13
а для этого принципиально использовать 1с?
3 Evil-Wisp
 
09.07.18
09:17
(2) В принципе нет. Можно передать путь к скачанному файлу в процедуру.
4 Звездец
 
09.07.18
09:25
(3) ну и попробуй например на php или чем то что тебе ближе. Примеров в интернете много
5 Evil-Wisp
 
09.07.18
09:39
(4) И на 1С есть примеры.

Решил. Помогло HTTP авторизация на сайте через POST запрос

//  в Куки надо чистые куки из set-cookie передавать, без всяких частей и слэшей.

Т.е. у меня только "sess=хххххххххххххххххххххххх;"
6 Evil-Wisp
 
09.07.18
09:39
Всем спасибо:)