Имя: Пароль:
1C
1С v8
HTTPСоединение получить в файл
0 PuhUfa
 
17.03.16
14:28
Есть некий web сервис который отвечает на запрос формата:
http://[ip-адрес]/cgi/data.php?format=[вид запроса]&[параметры запроса]&return=xml
return=xml – неизменный параметр, определяет формат ответа. Ответ формируется в формате XML. Ответ возвращается клиенту HTTP в текстовом виде.

В браузере запрос выполняется и я вижу в нем xml ответа.
Но вот при выполнении:

Соединение = Новый HTTPСоединение(СтрокаHTTPСоединение);
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = СтрокаЗапросаИдентификации;
Ответ = Соединение.Получить(СтрокаЗапросаИдентификации, ИмяВыходногоФайла);

В файле я получаю только:
<?xml version='1.0' encoding='windows-1251' ?>
    <data>    </data>

Как правильно получить такой же ответ как я получаю в браузере?
1 Serginio1
 
17.03.16
14:32
Для чистоты эксперимета попробуй http://catalog.mista.ru/public/466052/
2 lamme
 
17.03.16
14:33
Прокси = Новый ИнтернетПрокси();
        Прокси.Установить("http",СокрЛП(ПроксиСервер),ПроксиПорт);
        Прокси.Пользователь = СокрЛП(ПроксиИмяПользователя);
        Прокси.Пароль       = СокрЛП(ПроксиПарольПользователя);
        Попытка
            HTTP = Новый HTTPСоединение(СерверИсточник,,,, Прокси);
        Исключение
            Сообщить("Ошибка подключения: " + ОписаниеОшибки());
        КонецПопытки;
Адрес = "nАдрес";
ИмяВходящегоФайла = "файл";
Попытка
    HTTP.Получить(Адрес, ИмяВходящегоФайла);
Исключение
    Сообщить("Ошибка получения ссылки на адреса: " + ОписаниеОшибки());
    Возврат Ложь;
КонецПопытки;
3 Serginio1
 
17.03.16
14:33
4 lamme
 
17.03.16
14:34
попробуй еще - СтрокаЗапросаИдентификации - без http://[ip-адрес]
те СтрокаЗапросаИдентификации  = /cgi/data.php?format=[вид запроса]&[параметры запроса]&return=xml
5 lamme
 
17.03.16
14:36
а вот СерверИсточник=http://[ip-адрес]
6 PuhUfa
 
17.03.16
14:37
(4) так и делаю:
СтрокаHTTPСоединение = [ip-адрес]
СтрокаЗапросаИдентификации = /cgi/data.php?format=[вид запроса]&[параметры запроса]&return=xml
7 Записьдампа
 
17.03.16
14:46
СпособКодированияСтроки.КодировкаURL
8 PuhUfa
 
17.03.16
14:58
(2) если у меня нет прокси? web ресурс находится в VipNet
9 PuhUfa
 
17.03.16
15:07
(7) С кодированием бъет 404 ошибку
10 Записьдампа
 
17.03.16
15:10
(9) Тогда бери фидлер и смотри чем отличается запрос браузера о твоего запроса
11 lamme
 
17.03.16
15:54
(0)
еще есть
убери http из СерверИсточник
чтобы остался только www.хххххх
12 Записьдампа
 
17.03.16
16:04
(11) Судя по тому, что он xml таки получает, в адрес сервера он попадает правильно.

(9) Вангую, кстати, что ты закодировал всю СтрокаЗапросаИдентификации вместо кодирования значений параметров [вид запроса] и [параметры запроса] по отдельности.
13 PuhUfa
 
17.03.16
16:21
(10) Из фидлер:
Браузер:
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ru-RU
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Accept-Encoding: gzip, deflate
Host: 11.0.0.1
DNT: 1
Connection: Keep-Alive
Cookie: b=b

1с:
Proxy-Authorization: NTLM TlRMTVNTUAABAAAAt7II4gkACQAqAAAAAgACACgAAAAGAvAjAAAAD4+KV09SS0dST1VQ
User-Agent: 1C+Enterprise/8.3
Host: 11.0.0.1
Accept: */*
Connection: Keep-Alive
14 PuhUfa
 
17.03.16
16:23
(12) Да, кодировал целиком строку -)
15 Записьдампа
 
17.03.16
16:47
(14) Ну дык сделай правильно =]
16 Записьдампа
 
17.03.16
16:51
(13) Там кроме заголовков еще много что есть. RAW покажи.
17 Serginio1
 
17.03.16
17:04
(14) Не пробовал 1?
18 Serginio1
 
17.03.16
17:05
Кстати Cookie: b=b
19 PuhUfa
 
17.03.16
17:22
(15) то что доктор прописал -)
правда если параметр только числовой.
Если параметр имеет русское значение то после кодировки он превращается в
&im=%D0%94%D0%BC%D0%B8%D1%82
Но это видимо нужно поиграться с 3м параметром КодироватьСтроку
20 Записьдампа
 
17.03.16
17:34
(19) Да.

%D0 в начале каждой буквы намекает на то, что у тебя сейчас строка в UTF-8 передается. Надо понять, в чем сервер ожидает русское и указать его.

Или попробовать принудительно указать в заголовке:
Content-Type: application/x-www-form-urlencoded ; charset=UTF-8
21 PuhUfa
 
17.03.16
17:44
(20) ну когда я из браузера делаю запрос, я и пишу русскими, и в фидлере показывает нормально.
Правда для числовых параметров тоже все показывало одинаково, но пока КодироватьСтроку не вставил из 1С не раабоало -)
22 PuhUfa
 
17.03.16
19:17
Обманул я... Когда я делаю запрос напрямую из браузера, фиддлер показывает вот так:
GET http://11.0.0.1//cgi/data.php?format=by_fio&fam=       &im=       &ot=          

Сюда копипастит пробелами, а в фиддлере это квадратики
23 PuhUfa
 
17.03.16
19:40
(20) Все, поборол кодировку и теперь получает и при русских параметрах. Спасибо большое, с меня причитается -)
24 Serginio1
 
17.03.16
21:57
А стоило почитать статью

Для каждого стр Из структура  Цикл
        
       сб.AppendFormat("{0}={1}&",HttpUtility.UrlPathEncode(стр.Ключ),HttpUtility.UrlPathEncode(стр.Значение),0);
    
    КонецЦикла;
    
    стр=сб.ToString(0,сб.Length-1);
    Сообщить(стр);
    //Сделаем запрос по относительному пути
    //Так как основной путь уже прописан в BaseAddress
    res = Client.GetStringAsync(стр).Result;
25 Записьдампа
 
18.03.16
07:37
.net не нужен =]
26 Serginio1
 
18.03.16
08:11
(25) Согласен. Но если бы статью прочитал, то понял бы, что нужно строки кодировать.
27 PuhUfa
 
18.03.16
08:18
(26) в качестве спс - плюсанул -)
28 Записьдампа
 
18.03.16
08:20
(26) Нет. Если бы с http работал, то понял бы. А твой русско-наглицский диалект программирования заставляет народ разрабатывать методом тыка =]
29 Serginio1
 
18.03.16
08:42
(28) Так он и не работал. Кроме того у HTTPClient просто больше возможностей. И это тоже нужно знать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn