C# webrequest get抛出一个异常;远程服务器返回错误:(501)未实现;
我正在尝试使用webrequest方法加载文件。首先我需要登录,然后获取一个文件或目录列表 当我在firefox中查看网站源代码时,我看到C# webrequest get抛出一个异常;远程服务器返回错误:(501)未实现;,c#,webrequest,notimplementedexception,C#,Webrequest,Notimplementedexception,我正在尝试使用webrequest方法加载文件。首先我需要登录,然后获取一个文件或目录列表 当我在firefox中查看网站源代码时,我看到 <META http-equiv="Content-Type" content="text/html"> .... <form method="post" action="/template/login" enctype="application/x-www-form- urlencoded"> .... <
<META http-equiv="Content-Type" content="text/html">
....
<form method="post" action="/template/login" enctype="application/x-www-form- urlencoded">
....
<input name="user" type="text">
<input name="password" type="password">
<input type=hidden name="switch" value="Log In">
<input type="submit" value="Accept">
我得到的响应是正常的-因此我似乎成功登录。
但是,我需要转到另一个url来获取文件
我总是收到系统异常。异常:System.Net.WebException:远程服务器返回错误:(501)未实现。在System.Net.HttpWebRequest.GetResponse()中
我已经阅读了所有我能找到的关于这个错误的信息——似乎问题应该在我得到的方式上——请求中有一些东西没有在服务器上得到正确处理——但我不知道是什么错了 “未实现”是因为您正在为GET请求指定ContentType。它对服务器没有任何意义(它主要在POST请求期间使用,并且您希望提交有效负载,例如XML)。您需要检查响应中是否有正确的内容类型,以确保获得zip文件,但要发出请求,必须删除该ContentType规范
我想这也是齐姆布先生在评论中指出的 “未实现”是因为您正在为GET请求指定ContentType。它对服务器没有任何意义(它主要在POST请求期间使用,并且您希望提交有效负载,例如XML)。您需要检查响应中是否有正确的内容类型,以确保获得zip文件,但要发出请求,必须删除该ContentType规范
我想这也是齐姆布先生在评论中指出的 问题出在postData中。显然,远程服务器不喜欢“user=“+userName+”&Password=“+pass”;sting-它正期待着这个sting“user=ID&Password=Pass”。这没什么道理,但这是我被告知的,而且有效。 非常感谢你的建议。
珍妮问题出在postData。显然,远程服务器不喜欢“user=“+userName+”&Password=“+pass”;sting-它正期待着这个sting“user=ID&Password=Pass”。这没什么道理,但这是我被告知的,而且有效。 非常感谢你的建议。
Jenny使用Fiddler将您的请求与来自真实浏览器的请求进行比较。返回错误的是远程服务器。这就是WebRequest引发异常的原因。您需要找出远程服务器不喜欢的内容。我认为可能是requestToGetFile.ContentType=“application/octet stream”行。如果我没有弄错的话,请求不应该是八位字节流内容类型,而是zip文件的响应应该是。试着注释一下,看看是否有效?使用Fiddler将您的请求与来自真实浏览器的请求进行比较。返回错误的是远程服务器。这就是WebRequest引发异常的原因。您需要找出远程服务器不喜欢的内容。我认为可能是requestToGetFile.ContentType=“application/octet stream”行。如果我没有弄错的话,请求不应该是八位字节流内容类型,而是zip文件的响应应该是。试着评论一下,看看它是否有效?
public static string DownloadFile()
{
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https:///xxx.yyy.zzz/login_template");
request.CookieContainer = cookieJar;
// Set the credentials.
request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
request.Credentials = new NetworkCredential(userName, pass);
request.KeepAlive = true;
request.UserAgent = "SecureTransport";
request.ContentType = @"application/x-www-form-urlencoded";
request.Method = WebRequestMethods.Http.Post;
bool loggedin = false;
try
{
// first need to log in
string postData = "user=" + userName + "&Password=" + pass;
byte[] postBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
request.ContentLength = postBuffer.Length;
Stream newStream = request.GetRequestStream();
// Send the data.
newStream.Write(postBuffer, 0, postBuffer.Length);
newStream.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
// Get the stream containing content returned by the server.
if (response.StatusCode == HttpStatusCode.OK)
{
loggedin = true;
}
response.Close();
}
HttpWebRequest requestToGetFile = (HttpWebRequest)WebRequest.Create("https:///xxx.yyy.zzz/myfile.zip");
requestToGetFile.Method = WebRequestMethods.Http.Get;
requestToGetFile.CookieContainer = cookieJar;
requestToGetFile.UserAgent = "SecureTransport";
requestToGetFile.ContentType = @"application/octet-stream";
using (HttpWebResponse responseToGetFile = (HttpWebResponse)requestToGetFile.GetResponse())
{
if (responseToGetDir.StatusCode != HttpStatusCode.OK)
{
...
}
}