HttpWebRequest的C#中的HTTPS
-
23-08-2019 - |
题
这一段代码不工作;它登录到网站,使用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);
不隶属于 StackOverflow