Имя: Пароль:
1C
 
Как из 1Cv8 сделать http-запрос к страничке с передачей данных методом POST
0 aka clappa
 
08.12.06
20:05
Вредный банковский сервер отказывается принимать параметры через URL-строку. Может, кто-нить подскажет, как их передать методом POST?

Нашел у объекта HTTPСоединение метод ОтправитьДляОбработки(...), но, похоже, мимо (по крайней мере, запрос к серверу с помощью этого метода не принес результатов).

Короче, дошел до того, что сам нарисовал страничку-форму с нужными мне параметрами и кнопкой SUBMIT. При её нажатии запрос уходит на сервер, а затем возвращаются нужные мне данные. Теперь ломаю голову, как на эту кнопочку нажать автоматически. :-(
1 x4
 
08.12.06
20:24
ОтправитьДляОбработки это именно POST, правда местами кривой: под 8.1 не удалось  заставить его посылать больше одного моего заголовка, а под 8.0 работало ещё.
2 x4
 
08.12.06
20:24
и есть куча COM-объектов для этой цели - подними Поиск
3 Drock
 
08.12.06
20:48
objIE = Новый COMОбъект("InternetExplorer.Application");
   objIE.Visible = Истина;  // Отключаем видимость
   objIE.Silent = Ложь;

   objIE.Navigate(Адрес);
   
   Сообщить("Идет загрузка страницы. Ждите...");
   
   Пока objIE.readyState<4 Цикл // Ждем пока загрузится сраница
   КонецЦикла;
objDoc = objIE.Document; // Получаем объект HTML-Документ
   
   objForm=objDoc.forms(0); // Получаем первую форму в документе
   Попытка
       objForm.elements("username").value = Имя; // Заполняем поле формы "Имя пользователя"
   Исключение
   КонецПопытки;
   objForm.elements("Password").value = Тема;
objForm.elements("submit").click();
4 aka clappa
 
08.12.06
20:51
(1) А как им пользоваться. Вроде разобрался, что второй параметр - путь к ресурсу на сервере, третий - имя локального файла для выгрузки результата, четвертый параметры (каждый на новой строке, имя и значение разделены двоеточием). А что указывать в первом параметре?
5 aka clappa
 
08.12.06
20:52
(3) Thank's, попробую
6 Drock
 
08.12.06
20:57
я вот счас парюсь над выполнением явы скрипта на странице :(
7 Drock
 
08.12.06
20:57
8 Drock
 
08.12.06
20:58
да и берешь открываешь в броузере страницу, открываешь HTML ресурс - и глядишь что и как на странице называеться, имею ввиду элементы формы
9 Drock
 
08.12.06
20:59
ну или отладчиком можно поглядеть что из себя представляет objDoc
10 aka clappa
 
08.12.06
23:19
x4, отзовись!

Я всё пытаюсь заставить работать ОтправитьДляОбработки().
Причем тренируюсь уже на Мисте. Решил вызвать из 1С поиск по форуму. Но нифига не выходит, хотя я даже сниффер поставил, отследил какой запрос IE отправляет при нажатии SUBMIT, и пытаюсь из-под 1С отправить точно такой же. Всё равно, в ответ возвращается исходная страничка поиска, как будто я вызывал её без параметров.

Делаю так:

Соединение = Новый HTTPСоединение("www.forum.mista.ru");
Соединение.Post("c:\query.txt", "/find.php", "c:\res.htm");

Файл query.txt выглядит следующим образом:

POST http://www.forum.mista.ru/find.php HTTP/1.0
Accept: */*
Referer: http://www.forum.mista.ru/find.php
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.forum.mista.ru
Content-Length: 179
Pragma: no-cache

keyword=Hello&action=find&author=&look_topic=1&look_message=1&skip_user=1&skip_topic_author=1&look_actual=1&look_1c=1&look_it=1&look_life=1&section=&area=&period_since=-&period_to=-
11 x4
 
09.12.06
20:20
(4),(10) HTTP-заголовки должны быть в четвёртом параметре ОтправитьДляОбработки(),
а параметры name=value в теле в гордом одиночестве. Вот работающий код:

Соединение = Новый HTTPСоединение( "www.forum.mista.ru" );
Соединение.Post( "c:\query.txt", "find.php", "c:\res.htm", "Content-Type: application/x-www-form-urlencoded" );

содержимое файла "c:\query.txt":
keyword=Hello&action=find

а если потребуется передавать файл:
1. если он текстовый - то его имя в первый параметр,
  не ставить заголовок "Content-Type: application/x-www-form-urlencoded",
  и на сервер он придёт в stdin:
  copy( "php://input", $fn );
2. если НЕ текстовый то поможет Base64Строка
3. можно поэкспериментировать с "Content-Type: multipart/form-data",
  особенно если файлов несколько.
12 aka clappa
 
10.12.06
14:02
(11) Спасибо. Теперь всё ясно
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн