Имя: Пароль:
1C
1С v8
Непонятный ответ от сервера при Post-запросе
0 Dendroid92
 
24.02.16
22:58
Как написать на 1С аналогичный запрос кнопки "Поиск" на сайте elibrary.ru/authors.asp ?

В 1С пишу такой код для отправки запроса:

Сервер = "elibrary.ru";

    Ресурс = "/authors.asp";

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

    ФайлЗапроса = ПолучитьИмяВременногоФайла();

    ТекстовыйФайл = Новый ТекстовыйДокумент;

    ТекстовыйФайл.УстановитьТекст("authors_all=&pagenum=&authorbox_name=&selid=&orgid=&orgadminid=&surname=&codetype=SPIN&codevalue=&town=&countryid=&orgname=&rubriccode=&sortorder=0&order=0");

    ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);

    ФайлРезультата = ПолучитьИмяВременногоФайла();
    
    ФайлОтправки = Новый Файл(ФайлЗапроса);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    ЗаголовокHTTP.Вставить("Accept-Encoding", "gzip, deflate");
    ЗаголовокHTTP.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
    ЗаголовокHTTP.Вставить("Cache-Control", "max-age=0");
    ЗаголовокHTTP.Вставить("Connection", "keep-alive");    
    ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    ЗаголовокHTTP.Вставить("Host", "elibrary.ru");
    ЗаголовокHTTP.Вставить("Origin", "http://elibrary.ru";);
    ЗаголовокHTTP.Вставить("Referer", "http://elibrary.ru/authors.asp";);
    ЗаголовокHTTP.Вставить("Upgrade-Insecure-Requests", "1");

    HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP);

    Ответ = Новый ТекстовыйДокумент();

    Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);

    ТекстОтвета = Ответ.ПолучитьТекст();

    УдалитьФайлы(ФайлЗапроса);

    УдалитьФайлы(ФайлРезультата);


в ответ получаю html:

<head><title>Object moved</title></head>
<body><h1>Object Moved</h1>This object may be found <a HREF="/start_session.asp?rpage=http%3A%2F%2Felibrary%2Eru%2Fauthors%2Easp%3Ftown%3D%26authors%5Fall%3D%26pagenum%3D%26authorbox%5Fname%3D%26selid%3D%26orgname%3D%26orgid%3D%26orgadminid%3D%26countryid%3D%26surname%3D%26codevalue%3D%26order%3D0%26codetype%3DSPIN%26rubriccode%3D%26sortorder%3D0">here</a>.</body>
1 Записьдампа
 
24.02.16
23:18
HTTP код результата какой?
2 Dendroid92
 
24.02.16
23:21
(1) а как его посмотреть можно?
3 Записьдампа
 
24.02.16
23:28
HTTP.ОтправитьДляОбработки - это наверно функция?
4 Dendroid92
 
24.02.16
23:35
(3) Да, но если написать Ответ = HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс, ФайлРезультата, ЗаголовокHTTP); то возвращается ТекстовыДокумент, в котором толком ничего нет. Или я что-то не так понял?
5 Записьдампа
 
24.02.16
23:36
(4) СП что по этому поводу говорит?
6 Dendroid92
 
24.02.16
23:41
(5) Спасибо, дошло как посмотреть. Пишет 302 код. Не пойму почему
7 Записьдампа
 
24.02.16
23:43
Это правильно. А что делает уважающий себя браузер, когда получает такой ответ? =)
8 Dendroid92
 
24.02.16
23:46
(7) По идее перенаправляет на другую ссылку?
9 Записьдампа
 
24.02.16
23:48
(8) Пральна. Смотрит в заголовок location ответа. И так пока не дойдет или не зациклицо или не надоест.
10 Записьдампа
 
24.02.16
23:52
Но судя по тексту хтмл он пытается тебя загнать на авторизацию для начала сессии, так что там еще за куками смотреть надо
11 Serginio1
 
24.02.16
23:52
12 Записьдампа
 
24.02.16
23:53
Скорей всего для того, чтобы результаты поиска тебе по частям показывать
13 Dendroid92
 
24.02.16
23:56
(12) там походу надо поменять Ресурс = "/authors.asp"; на Ресурс = "/start_session.asp" и дальше прикручивать параметр rpage=elibrary.ru/authors.asp
14 Dendroid92
 
25.02.16
00:13
(10) похоже ты прав, отправил запрос по той ссылке, которую он присылал, теперь ведет меня на http://elibrary.ru/page_error.asp, открыл в браузере и понял, что надо авторизовываться, а потом делать поиск или же куки передавать сразу. Огромное спасибо, за помощь.
15 Записьдампа
 
25.02.16
00:14
(13) Нет. Параметр rpage говорит куда надо вернутся после успешного начала сессии.
Возьми уже фиддлер, прощелкай руками весь цикл от открытия браузера, чтобы в новую сессию попасть, и не парься догадками
16 Dendroid92
 
25.02.16
00:28
(15) Проставил куки и все нормально пришло. Тобишь надо авторизовываться, а уже потом делать поиск, либо же сразу кидать куки в запрос. Спасибо огромное, ты меня выручил.