Нужно передавать данные через прокси сервер на удаленный сервер. Прокси сервер использует NTLM аутентификацию. Следующий код должен посылать запрос и получать ответ:
Как результат я получаю ошибку 407 — необходима авторизация...
Смотрел сниффером что происходит. Все делается правильно за единственным исключением. Неопределен заголовок "Proxy-Connection: Keep-Alive". Я попробовал добавить его руками
Здравствуйте, Mika Soukhov, Вы писали:
MS>У WebClient можно переопределить метод GetWebRequest
Хеадер добавляется... Вот только когда вызывается метод UploadData, валится исключение:
"This header must be modified using the appropriate property. Parameter name: name".
Любая задача имеет решение, даже когда решения не существует
The WebHeaderCollection class is generally accessed through WebRequest.Headers or WebResponse.Headers. Some common headers are considered restricted and are either exposed directly by the API (such as Content-Type) or protected by the system and cannot be changed.
The restricted headers are:
Accept
Connection
Content-Length
Content-Type
Date
Expect
Host
If-Modified-Since
Range
Referer
Transfer-Encoding
User-Agent
Proxy-Connection
Это означает что я не смогу редактировать Proxy-Connection поле???
Любая задача имеет решение, даже когда решения не существует
Здравствуйте, Burd, Вы писали:
B>В группах гугля также обсуждается эта проблемма, например здесь B>Ответа нет... B>Помогите... Оч надо!
Попробуй в AuthenticationManager зарегистрировать свой модуль и Authorization.Message записать Keep-Alive. Хотя странно, что так не работает. Может прокси самопальная?
Здравствуйте, Burd, Вы писали:
B>Вот нашел в MSDN: B>
B>The WebHeaderCollection class is generally accessed through WebRequest.Headers or WebResponse.Headers. Some common headers are considered restricted and are either exposed directly by the API (such as Content-Type) or protected by the system and cannot be changed.
B>Это означает что я не смогу редактировать Proxy-Connection поле???
D MSDN для System.Net.WebHeaderCollection другой список запрещенных к изменению хидеров
The restricted headers are:
Accept
Connection
Content-Length
Content-Type
Date
Expect
Host
If-Modified-Since
Range
Referer
Transfer-Encoding
User-Agent
так что можно попробовать System.Net.HttpWebRequest.Headers.Add()
Мне интересно потому что сам как то столкнулся с 407 ошибкой на MS ISA прокси. Решения так и не нашел.
Так что напиши если получится. Оч интересно.
Здравствуйте, Mika Soukhov, Вы писали:
MS>Попробуй в AuthenticationManager зарегистрировать свой модуль и Authorization.Message записать Keep-Alive.
Спасибо, попробую...
MS>Может прокси самопальная?
Гы, боюсь это у нашего админа руки кривые... Но к сожалению доступа к проксе нет. Админ злой (потому что не может разобратся в проблеме, или потому что не хочет). Поэтому приходится выкручиваться...
Любая задача имеет решение, даже когда решения не существует
Здравствуйте, Burd, Вы писали:
B>Здравствуйте, Mika Soukhov, Вы писали:
MS>>и Authorization.Message записать Keep-Alive. Хотя странно, что так не работает.
B>Попробовал... Authorization.Message имеет только метод get. А переменная, которая отвечает свойству m_message находится в приват секции .
Посмотри по-лучше, там передается через конструктор.
Эх, сделал как ты сказал, сформировал строчку с паролем, в конец прибавил к ней нужный хеадер
BasicToken += "\r\nProxy-Connection: Keep-Alive";
Вот только теперь при запросе валится новый ексепшн:
"Specified value has invalid CRLF characters. Parameter name: value"
Вот это мрак... Вижу что ручками всунуть это поле никак не удастся... Хорошо они ограничение сделали... Надо наверное искать спецификации по работе прокси-серверов, сравнивать с реальными данными и слать Bug-report'ы в Майкрософт ...
Если есть еще идеи, подкидывайте... А то у меня они уже иссякли .
Любая задача имеет решение, даже когда решения не существует
Здравствуйте, Burd, Вы писали:
B>Здравствуйте, Mika Soukhov, Вы писали:
B>Эх, сделал как ты сказал, сформировал строчку с паролем, в конец прибавил к ней нужный хеадер B>
BasicToken += "Keep-Alive";
B>Вот только теперь при запросе валится новый ексепшн:
B>"Specified value has invalid CRLF characters. Parameter name: value"
B>Вот это мрак... Вижу что ручками всунуть это поле никак не удастся... Хорошо они ограничение сделали... Надо наверное искать спецификации по работе прокси-серверов, сравнивать с реальными данными и слать Bug-report'ы в Майкрософт ... B>Если есть еще идеи, подкидывайте... А то у меня они уже иссякли .
Чтобы добавить заголовок с Proxy-Connection пришлось написать свой TCP прокси-сервер, который перенаправлял запросы на HTTP прокси с добавлением необходимого поля. Как ни странно, ошибка повторилась! Попробовал сравнить запросы ИЕ и моего проксика. Аутентификация на HTTP прокси делается через NTLM. Насколько я понял, эта аутентификация делается в 2 захода — первый — посылается всегда одна и та же строка и обрабатывается ответ сервера (ИЕ посылает всегда одну и ту же строчку). Второй — по ответу и посланой строке строится аналог хеш сумы имя пользователя и пароля...
Так вот, первый запрос разный в моей программе и в ИЕ...
В этом ли грабли и если да, то как с ними бороться?
Любая задача имеет решение, даже когда решения не существует