Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 3

Приложение, использующее HttpWebRequest для доступа к файам .png на удалённом сервере через прокси

28.05.2012, 14:45. Показов 3190. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Пробую написать приложение, использующее HttpWebRequest для доступа к файам .png на удалённом сервере с установленным там IIS и NTLM аутентификацией. Составляю простенький GET-запрос вида:

GET http://servername/webservice/1.png HTTP/1.1

следующим образом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
string file_url = "http://servername/webservice/1.png";
Uri url = new Uri(file_url);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
 
CredentialCache crCache = new CredentialCache();
crCache.Add(new Uri("http://servername/webservice/"), "NTLM", new NetworkCredential("login", "password","domain"));
req.Credentials = crCache;
 
WebProxy Prox = new WebProxy("proxy.name", 3128);
req.Proxy = null;
 
req.Headers.Add(HttpRequestHeader.KeepAlive, "true");
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
req.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7");
req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate, identity");
req.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru,en-us;q=0.7,en;q=0.3");
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2";
string s = "";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
System.IO.Stream stream = resp.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(stream, Encoding.GetEncoding(1251));
s = sr.ReadToEnd();
resp.Close();
stream.Close();
Если запрашивать без proxy (req.Proxy = null;), то получил 3 (!) варианта работы:
1) на GetResponse() появляется Exception либо "Удаленный сервер возвратил ошибку: (401) Несанкционированный.";
2) реже, на этой же строке, "Сервер нарушил протокол";
3) работает без ошибок.

Если включать proxy (req.Proxy = Prox;), то вариант один - "Удаленный сервер возвратил ошибку: (401) Несанкционированный.".

Причём это безобразие происходит при подключении к серверу с рабочего места. Из дома всё работает хорошо.

Хотелось бы разобраться, как достучаться до ресурса, защищённого NTLM, используя прокси?

Сделал программку на Delphi (Indy), реализующую этот же процесс - всё прекрасно работает. Сравнил в сниффере заголовки - разница в том, что в варианте на Delphi можно
отсослать на proxy заголовок "Connection: Keep-Alive" (IdHTTP1.Request.Connection := 'keep-alive';), а в варианте на C#, похоже, некоторые заголовки дописываются автоматически и задать их явно никак нельзя:( И в этом случае отсылается "Proxy-Connection: Keep-Alive".
Строка кода req.Headers.Add(HttpRequestHeader.KeepAl ive, "true"); добавлет заголовк "Keep-Alive: true", но ситуацию это не меняет.

Запутал наверно) Просто много всего просмотрел, эта проблема встречается, но решение найти не смог. Есть ли у кого-нибудь идеи?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2012, 14:45
Ответы с готовыми решениями:

Создание доступа к общему каталогу находящегося на удаленном сервере
Помогите решить такую задачу: есть два сервера srv0 и srv2. Они объединены в VPN посредством двух ZyWall (1050 и 35). Каждый из этих...

Запрос HttpWebRequest через прокси
Всем привет. Делаю запрос проходящий через прокси. Делаю вот так: HttpWebRequest request =...

HttpWebRequest через прокси socks4
Здравствуйте, подскажите какое-нибудь стороннее решение, чтобы отправлять запросы HttpWebRequest через прокси socks4. Прошу не...

2
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 3
29.05.2012, 23:41  [ТС]
Хм. Похоже, что дело не в Keep-Alive. В обоих случаях - и в варианте Delphi, и в .NET - у меня существует keep-alive соединение, тем более, что в HTTP/1.1 оно таковым является по умолчанию. Нашёл интересное объяснение того, почему может давать сбой HttpWebRequest:

http://ferozedaud.blogspot.com... -with.html

Возможно, проблема в том, что какая-либо из сторон может не поддерживать 128-битное шифрование. Установил параметр "Требовать 128-битное шифрование" и на стороне сервера, и на клиентском компьютере. Результат тот же - без прокси работает нормально, с прокси - ошибка 401. Проверил сниффером - Negotiate Seal and Negotiate Sign установлены в 1. Возможно, что из-за этого прокси и не может передать параметры аутентификации на сервер.

Вопрос: как программно отключить "Negotiate Seal" и "Negotiate Sign"?

Нашел в msdn "contextOptions":

http://msdn.microsoft.com/en-u... tions.aspx

Но как это применить, используя HttpWebRequest?
0
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 3
04.06.2012, 16:26  [ТС]
Вопрос ещё актуален.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.06.2012, 16:26
Помогаю со студенческими работами здесь

Как запустить клиентское приложение на удаленном сервере?
Люди! Помогите советом и вправьте мозги если что :). Вот есть эта технология. Не пожалел денег, купил две книги. Одна - Поля Аллена...

Как запустить приложение с GUI на удаленном сервере?
Собственно есть чисто виндузовое приложение с GUI и его нужно запустить на удаленном сервере с ubuntu. У клиента же стоит виндуз. С...

Post запрос HttpWebRequest через прокси socks5
Есть код простого пост запроса string POST(string url, string data) { HttpWebRequest request =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru