当我尝试POST到一个URL时,会导致以下异常:
远程服务器返回错误:
(417)期望失败。
下面是一个示例代码:
var client = new WebClient();
var postData = new NameValueCollection();
postData.Add("postParamName", "postParamValue");
byte[] responseBytes = client.UploadValues("http://...", postData);
string response = Encoding.UTF8.GetString(responseBytes); // (417) Expectation Failed.
使用HttpWebRequest/HttpWebResponse对或HttpClient没有区别。
是什么导致了这个异常?
您试图模拟的表单是否有两个字段,用户名和密码?
如果是这样,这一行:
postData.Add("username", "password");
不正确。
你需要两行代码:
postData.Add("username", "Moose");
postData.Add("password", "NotMoosespasswordreally");
编辑:
好吧,既然这不是问题所在,解决这个问题的一种方法是使用Fiddler或Wireshark之类的工具来查看从浏览器成功发送到web服务器的内容,然后将其与从您的代码发送的内容进行比较。如果从。net转到普通的80端口,Fiddler仍然会捕获这些流量。
表单上可能有一些web服务器期望你没有发送的其他隐藏字段。
您试图模拟的表单是否有两个字段,用户名和密码?
如果是这样,这一行:
postData.Add("username", "password");
不正确。
你需要两行代码:
postData.Add("username", "Moose");
postData.Add("password", "NotMoosespasswordreally");
编辑:
好吧,既然这不是问题所在,解决这个问题的一种方法是使用Fiddler或Wireshark之类的工具来查看从浏览器成功发送到web服务器的内容,然后将其与从您的代码发送的内容进行比较。如果从。net转到普通的80端口,Fiddler仍然会捕获这些流量。
表单上可能有一些web服务器期望你没有发送的其他隐藏字段。