这一段代码不工作;它登录到网站,使用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());
}
有帮助吗?

解决方案

Set请求方法后,主叫GetRequestStream前

request.Method = "POST";

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

其他提示

我的猜测是,你所遇到的问题是由于你正在做一个GET请求而不是POST请求的事实(像其他人决定)。此外,我注意到,该网页上密码字段的实际名称是“heslo”,而不是“密码”。这错字不会导致Web服务器不返回响应,但它会导致其他问题,因为服务器是寻找一个特定的变量名与密码值被公布。

您可能也想找出你发布什么,事先的总长度,并设置为请求的ContentLength。请参见 MSDN

  

一个ProtocolViolationException在一些情况下当甩的属性上设定的   HttpWebRequest类的冲突。如果应用程序设置,就会出现此异常   的ContentLength属性和SendChunked属性为true,然后发送一个HTTP GET   请求。如果应用程序试图发送分块到服务器,就会出现此异常   仅支持HTTP 1.0协议,其中该不支持。 如果一个发生此异常   应用程序试图而不设置的ContentLength属性发送数据或所述   SendChunked为假时缓冲被禁止并在保持活动连接(   KeepAlive属性是正确的)。

下面是我的什么作品:

    var request = WebRequest.Create(_url);
    request.PreAuthenticate = true;
    request.Credentials = new NetworkCredential(_userName, _password);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top