HttpWebRequest с https в C # - PullRequest
       51

HttpWebRequest с https в C #

9 голосов
/ 12 февраля 2009

Этот кусок кода не работает; он заходит на сайт, который использует протокол https. Как решить эту проблему? Код останавливается на GetRequestStream() в любое время где угодно, сообщая, что исключение нарушения протокола не обрабатывается ..

string username = "user";
string password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://moje.azet.sk/prihlasenie.phtml?KDE=www.azet.sk%2Findex.phtml%3F");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)";

Console.WriteLine(request.GetRequestStream());

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Retrieve your cookie that id's your session
//response.Cookies

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    Console.WriteLine(reader.ReadToEnd());
}

Ответы [ 4 ]

5 голосов
/ 12 февраля 2009

Установить метод запроса для публикации перед вызовом GetRequestStream

как

request.Method = "POST";

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}
3 голосов
/ 12 февраля 2009

Я предполагаю, что проблема, с которой вы сталкиваетесь, связана с тем, что (как и другие советуют) вы выполняете запрос GET вместо запроса POST. Кроме того, я заметил, что фактическое имя для поля пароля на этой странице - «heslo», а не «пароль». Эта опечатка не заставит веб-сервер не возвращать ответ, но вызовет другие проблемы, так как сервер ищет, чтобы конкретное имя переменной было опубликовано со значением пароля.

1 голос
/ 12 февраля 2009

Вы также можете заранее определить общую длину того, что вы публикуете, и установить ее как ContentLength запроса. См. MSDN :

Исключение ProtocolViolationException вызывается в нескольких случаях, когда свойства, установленные на Класс HttpWebRequest конфликтует. Это исключение происходит, если приложение устанавливает Свойство ContentLength и свойство SendChunked имеют значение true, а затем отправляет HTTP GET запрос. Это исключение возникает, если приложение пытается отправить чанк на сервер, который поддерживает только протокол HTTP 1.0, где это не поддерживается. Это исключение возникает, если приложение пытается отправить данные, не устанавливая свойство ContentLength или SendChunked имеет значение false, когда буферизация отключена и для соединения keepalive ( Свойство KeepAlive имеет значение true).

0 голосов
/ 05 января 2012

Вот что у меня работает:

    var request = WebRequest.Create(_url);
    request.PreAuthenticate = true;
    request.Credentials = new NetworkCredential(_userName, _password);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...