Имя: Пароль:
1C
 
HTTP через прокси
0 Kulak Faust
 
04.05.08
16:31
Ввожу в браузере строку: http://cbrates.rbc.ru/tsv/cb/978.tsv
Всё нормально, файл грузится. В браузере настройки:
Использовать прокси-сервер - да
Адрес - [сервер прокси]
Порт - 8080
Не использовать прокси-сервер для локальных адресов - да
Пытаюсь сделать тоже самое через 1С.

   ПроксиСервер = Новый ИнтернетПрокси();
   ПроксиСервер.Пользователь = ИмяПользователя;
   ПроксиСервер.Пароль       = ПарольПользователя;    //как при входе в сеанс винды
   ПроксиСервер.Установить("http",Сервер,Порт);    //сервер и порт указаны как в браузере
   ПроксиСервер.Установить("https",Сервер,Порт);

   HTTP = Новый HTTPСоединение(СерверИсточник,,,, ПроксиСервер, истина);    // СерверИсточник="cbrates.rbc.ru"
   HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла);        // СтрокаПараметраПолучения="tsv/cb/978.tsv"

На последней строке вываливается ошибка: "Ошибка работы с Интернет:  failure when receiving data from the peer"

Соединение по идее должно быть защищенным. Если делать незащищенное соединение:

   HTTP = Новый HTTPСоединение(СерверИсточник,,,, ПроксиСервер, ложь);    

то падает с ошибкой:

"Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу 'tsv/cb/978.tsv'
           HTTP.Получить(СтрокаПараметраПолучения, ИмяВходящегоФайла);
по причине:
Ошибка доступа к файлу 'tsv/cb/978.tsv'
по причине:
Ошибка работы с Интернет:  требуется аутентификация прокси (407)."

Кто-нибудь сталкивался с подобной проблемой? Где копать?
1 ТелепатБот
 
гуру
04.05.08
16:31
2 Kulak Faust
 
04.05.08
17:09
телепат-бот не помог (
3 Kulak Faust
 
05.05.08
16:39
UP
Надежда на бубен?
4 shuhard
 
05.05.08
16:42
(3)
Приложение В. Формат файла настройки прокси по умолчанию inetcfg.xml

Файл inetcfg.xml позволяет задавать настройки прокси по умолчанию и имеет больший приоритет над настройками прокси по умолчанию в Windows.

Файл располагается в каталоге CONF каталога исполняемых файлов системы 1С:Предприятие 8.1 и его наличие не является обязательным.

Если он отсутствует, то настройки в Windows берутся из настроек InternetExplorer'a.

В Linux, если есть необходимость работать через прокси, файл inetcfg.xml должен присутствовать.

Корневой элемент InternetProxy, задающий настройки прокси по умолчанию имеет следующую структуру (атрибуты):
protocols

protocols : строка (необязательное) – задает имя и порт хоста для протоколов. Имеет формат:

ПараметрыПроксиПротокола1 ПараметрыПроксиПротокола2

                       … ПараметрыПроксиПротоколаN

ПараметрыПроксиПротокола:= [Протокол] “=”

                                хост”:”порт

Список параметров прокси протоколов разделен пробелами. Каждый параметр состоит из необязательного имени протокола, знака “равно”, имени хоста и порта прокси сервера разделенных двоеточием. Если имя протокола не указано, то параметры прокси используются для всех протоколов, для которых они явно не указаны. Протоколы могут иметь следующие имена:

·      http;

·      https;

·      ftp.

Регистр является значимым, другие имена протоколов не поддерживаются.

Пример:

protocols="http=10.1.0.8:8080 10.1.0.9:8080"

В примере для протокола http определены параметры прокси: хост – 10.1.0.8, порт – 8080. Для остальных протоколов (https, ftp): хост - 10.1.0.9, порт – 8080.
user

user : строка (необязательное) – имя пользователя для аутентификации на прокси сервере. Пример:

user="proxyUser"
password

password : строка (необязательное) – пароль пользователя для аутентификации на прокси сервере. Пример:

password="proxyPassword"
bypassOnLocal

bypassOnLocal : булево (необязательное) – признак того, использовать ли прокси сервер для локальных адресов:

·      true – не использовать;

·      false – использовать.

Локальность адреса определяется по наличию точки в DNS имени адреса (т.е. все IP адреса не являются локальными). Поэтому может получиться так, что фактически локальный адрес не распознается как локальный.

Например: <пользовать>.<домен> – является в WindowsXP локальным адресом, но не распознается как локальный. Для того чтобы запретить использовать прокси для адресов, которые воспринимаются как локальные, используется следующий параметр:

bypassOnLocal="true"

Для всех остальных адресов нужно использовать параметр – bypassOnAddresses.
bypassOnAddresses

bypassOnAddresses : строка (необязательное) – список адресов, для которых прокси не используется. Имеет формат:

хост1 хост2 … хостN

Имена хостов разделяются пробелами. Имя хоста может содержать специальные символы маски: * – любое количество символов, ? – любой символ. Например, чтобы блокировать прокси для всех хостов домена, нужно использовать: *.<имя домена>. Пример:

bypassOnAddresses=" 127.0.0.1 *.master"

В примере для адреса 127.0.0.1 (localhost) и для всех адресов домена master прокси не используется.

Общий пример файла inetcfg.xml:

<InternetProxy

protocols="http=10.1.0.8:8080 10.1.0.9:8080"

user="proxyUser"  

password="proxyPassword"

bypassOnLocal="true"

bypassOnAddresses="127.0.0.1 *. master"

/>,
5 Kulak Faust
 
05.05.08
17:03
Спасибо, попробовал с inetcfg.xml, в программе оставил только:

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

Если смотреть по отладчику на реквизиты объекта HTTP, то по сути ничего не меняется, прописываю ли я настройки программно, не пропиываю нигде и они берутся из IE или я использую inetcfg.xml. Результат один и тот же. Не пашет. Выдает все те же ошибки.
6 shuhard
 
05.05.08
17:12
(5) мне разок пришлось переписать код:
полная ветка здесь:
v8: Курсы валют
СерверИсточник           = СерверИсточникПараметр;
   СтрокаПараметраПолучения = СтрокаПараметраПолученияПараметр;
   ИмяВходящегоФайла        = ИмяВходящегоФайлаПараметр;
   
   Попытка
     

       aUrlRequest = "http://" + СерверИсточникПараметр + "/" + СтрокаПараметраПолучения;

       oXMLHTTP = Новый COMОбъект("MSXML2.XMLHTTP");
       oXMLHTTP.open("GET",aUrlRequest, False );
       oXMLHTTP.Send();
       FSO = Новый COMОбъект("Scripting.FileSystemObject");
       Fso.CreateTextFile(ИмяВходящегоФайла,True);
       FileFso =Fso.OpenTextFile(ИмяВходящегоФайла,2,True);
       FileFso.writeline(oXMLHTTP.responseText);

       Возврат Истина;
   Исключение
7 Kulak Faust
 
05.05.08
17:52
Спасибо! Заработало!
Жалко, что сам январскую ветку не смог найти :)
8 shuhard
 
05.05.08
18:21
(7) не поверишь, я ветку со вчерашнего дня искал, нашел через sql.ru
9 b_ru
 
05.05.08
22:07
Прокси при авторизации использует не NTLM? (Ms Isa, например) Если так, то скорее всего со встроенным 1Совским классом ИнтернетПрокси можно распрощаться.
10 Kulak Faust
 
06.05.08
10:51
админ говорит, что NTLM
11 Timuss
 
06.05.08
13:04
(10) ну вот в том и собака..пусть админ поставит временно Plain Text Password и все взлетит...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший