Имя: Пароль:
1C
 
Как юзать HTTPСоединение? для POST метода
,
0 SOLO1C
 
19.05.09
11:04
Ситуация такая - пытаюсь методами пост запросов залогиниться на сайт
Для просмотра заголовков использовал HttpAnalyzerFullV2
1 SOLO1C
 
19.05.09
11:05
Написал такой код
СтруктураПараметровСайта = ПолучитьСтруктуруПараметровДляСоединения(Объект, Объект.HTTPОбменАдресСайта);
       
   Соединение = HTTPУстановитьСоединение(СтруктураПараметровСайта);
   
   Если Соединение = Неопределено Тогда
       Возврат "Ошибка при установке соединения с сайтом.";
   КонецЕсли;
   Заголовки =    "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, */*"+Символы.ВК+Символы.ПС
   +"Referer: http://trofim/published/login.php?"+Символы.ВК+Символы.ПС  
   +"Accept-Language: ru"+Символы.ВК+Символы.ПС
   + "Content-Type: application/x-www-form-urlencoded"+Символы.ВК+Символы.ПС
   + "UA-CPU: x86"+Символы.ВК+Символы.ПС
   + "Accept-Encoding: gzip, deflate"+Символы.ВК+Символы.ПС
   + "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"+Символы.ВК+Символы.ПС
   + "Host: trofim"+Символы.ВК+Символы.ПС
   + "Content-Length: 133"+Символы.ВК+Символы.ПС
   + "Connection: Keep-Alive"+Символы.ВК+Символы.ПС
   + "Cache-Control: no-cache"+Символы.ВК+Символы.ПС
   + "Cookie: wbs_login_host=TROFIM; screenMode=max";
   ОтветСервера = HTTPПолучитьДанныеССервера(Соединение, СтруктураПараметровСайта.АдресСкрипта + "?userdata%5BDB_KEY%5D=TROFIM&edited=1&userdata%5BU_ID%5D=admin&userdata%5BU_PASSWORD%5D=123456&C=",Заголовки);
   
   Если ОтветСервера = Неопределено Тогда
       СтрокаСообщенияПользователю = "Не удалось установить соединение с сервером. Авторизация пользователя не выполнена." + Символы.ПС + ОписаниеОшибки();
       Возврат Ложь;
   КонецЕсли;
2 SOLO1C
 
19.05.09
11:05
Функция HTTPПолучитьДанныеССервера(Соединение, ПараметрыЗапроса="", Заголовки="", СтрокаСообщенияПользователю = "") Экспорт
   
   ОтветСервера   = Неопределено;
   ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
       
   Попытка
       Соединение.Получить(СокрЛП(ПараметрыЗапроса), ИмяФайлаОтвета, СокрЛП(Заголовки));
   Исключение
       СтрокаСообщенияПользователю = "Не удалось получить данные с сервера.Проверьте правильность адреса сервера, порт, имя пользователя и пароль,"
           + Символы.ПС + "а также настройки подключения к Интернет.";
   КонецПопытки;    
   
   ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
   
   Если ФайлОтвета.Существует() Тогда
       
       ТекстОтвета = Новый ТекстовыйДокумент();
       ТекстОтвета.Прочитать(ИмяФайлаОтвета);
       Если ТекстОтвета.КоличествоСтрок()>0 Тогда
           ОтветСервера = ТекстОтвета.ПолучитьТекст();    
       Иначе
           СтрокаСообщенияПользователю = "Получение данных с сервера: Получен пустой ответ сервера.";    
       КонецЕсли;    
       
   Иначе    
       СтрокаСообщенияПользователю = "Получение данных с сервера: Ответ сервера не получен.";
   КонецЕсли;    
   
   Попытка
       УдалитьФайлы(КаталогВременныхФайлов(), ИмяФайлаОтвета);
   Исключение
   КонецПопытки;
   
   Возврат ОтветСервера;
   
КонецФункции
3 SOLO1C
 
19.05.09
11:07
Вот это центральная строка:
Соединение.Получить(СокрЛП(ПараметрыЗапроса), ИмяФайлаОтвета, СокрЛП(Заголовки));
И она в моем случае ничего не возвращает.
Есть подозрение что метод Соединение.Получить =  GET а не POST. Правда ?
4 SOLO1C
 
19.05.09
11:28
Или обязательно использовать объект("WinHttp.WinHttpRequest.5.1")?
5 SOLO1C
 
19.05.09
11:36
АП - неужели никто ен знает метод Соединение.Получить это  GET или POST или вообще он сам определяется.
6 lamme
 
19.05.09
11:44
щас погодь .. залезу посмотрю ...
пользовался такой
7 lamme
 
19.05.09
11:50
у меня так работает:

перем HTTP

Функция УстановитьСоединение()
   
   Прокси = Новый ИнтернетПрокси();
   Прокси.Установить("http",СокрЛП(ЭлементыФормы.ПроксиСервер.Значение),ЭлементыФормы.ПроксиПорт.Значение);
   Прокси.Пользователь = СокрЛП(ЭлементыФормы.ПроксиИмяПользователя.Значение);
   Прокси.Пароль       = СокрЛП(ЭлементыФормы.ПроксиПарольПользователя.Значение);
   Попытка
       HTTP = Новый HTTPСоединение(СерверИсточник,,,, Прокси); //
       Возврат Истина;
   Исключение
       Сообщить("Ошибка подключения: " + ОписаниеОшибки());
       Возврат Ложь;
   КонецПопытки;
   
КонецФункции // УстановитьСоединение()



Процедура ПолучитьЧегониб()

       Адрес = "/jcgate/gate.php/";
       ИмяВходящегоФайла = КВФ + "adr_.txt";
       Попытка
           HTTP.Получить(Адрес, ИмяВходящегоФайла);
       Исключение
           Сообщить("Ошибка получения данных: " + ОписаниеОшибки());
           Возврат Ложь;
       КонецПопытки;

конецпроцедуры


в итоге - получается файл : КВФ + "adr_.txt";
8 lamme
 
19.05.09
11:51
(3)
а вообще
HTTPСоединение.Получить (HTTPConnection.Get)
HTTPСоединение (HTTPConnection)
Получить (Get)
Синтаксис:
Получить(<Источник>, <Имя выходного файла>, <Заголовки>)
Параметры:
<Источник> (обязательный)
Тип: Строка. Адрес ресурса на сервере.
<Имя выходного файла> (обязательный)
Тип: Строка. Имя файла, в который помещаются данные полученного ресурса.
<Заголовки> (необязательный)
Тип: Строка. Указываются заголовки, добавляемые к запросу на сервер. Текстовые пары вида <Заголовок>:<Значение>, разделяемые комбинацией ВК + ПС.
Описание:
Получает ресурс из указанного адреса.
9 SOLO1C
 
19.05.09
11:56
(8) Спасибо, теперь понятно что это GET - но мне нужно заPOSTить данные на сервер для залогинивания. Т.е. мне нужен POST - а твой пример вроде именно GET
10 SOLO1C
 
19.05.09
11:59
Ой туплю в СП же написано ОтправитьДляОбработки (Post)
11 Поручик
 
19.05.09
12:01
Типа попиариться. Вдруг кому пригодится
http://infostart.ru/blogs/1066/
12 SOLO1C
 
19.05.09
12:04
(11) Круто - спасибо - гугля ее не нашла вроде
13 SOLO1C
 
19.05.09
12:47
(12) Если есть POST запрос "userdata%5BDB_KEY%5D=TROFIM&edited=1&userdata%5BU_ID%5D=admin&userdata%5BU_PASSWORD%5D=123456&enter=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&C="  
Как мне его правильно запихнуть в файл ? Обязательно это boundary ?
И вот это все :

       ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
       ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""backurl""" + Символы.ПС);
       ФайлОтправки.ЗаписатьСтроку("/");
       ФайлОтправки.ЗаписатьСтроку("--" + Boundary);


Просто строкой вроде не отрабатывает :(;
14 SOLO1C
 
19.05.09
12:48
(12)->(11)
15 SOLO1C
 
19.05.09
12:57
(14) Есть вот такой стрим, всетаки как его запихунть в ПОСТ?:


POST /published/login.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Referer: http://trofim/published/login.php
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.30618)
Host: trofim
Content-Length: 133
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: onbrowsercloseexpire=1; wbs_login_host=TROFIM; PHPSESSID=b38b0eb5da740362cdf242b189700cde
userdata%5BDB_KEY%5D=TROFIM&edited=1&userdata%5BU_ID%5D=admin&userdata%5BU_PASSWORD%5D=123456&enter=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&C=
16 SOLO1C
 
19.05.09
15:35
Как извлечь из ответа Заголовки?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.