Myi*_*ael 8 .net c# post webrequest httpwebresponse
好的,这是交易.正如问题所述,我正在尝试将文件发布到网络服务器并且遇到一些问题.
我尝试使用Curl.exe将同一个文件发布到同一个Web服务器,并且没有任何问题.我已经发布了我用curl的标志,因为他们可能会指出我为什么遇到.NET类问题的任何潜在原因.
curl.exe --user "myUser:myPass" --header "Content-Type: application/gzip"
--data-binary "@filename.txt.gz" --cookie "data=service; data-ver=2; date=20100212;
time=0900; location=1234" --output "out.txt" --dump-header "header.txt"
http://mysite/receive
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用像WebClient或HttpWebRequest这样的.NET类来做同样的事情.这是我尝试过的代码示例.使用WebClient,我得到505 HTTP版本不支持错误,并且使用HttpWebRequest我得到501 Not Implemented.
使用WebClient尝试时:
public void sendFileClient(string path){
string url = "http://mysite/receive";
WebClient wc = new WebClient();
string USERNAME = "myUser";
string PSSWD = "myPass";
NetworkCredential creds = new NetworkCredential(USERNAME, PSSWD);
wc.Credentials = creds;
wc.Headers.Set(HttpRequestHeader.ContentType, "application/gzip");
wc.Headers.Set("Cookie", "location=1234; date=20100226; time=1630; data=service; data-ver=2");
wc.UploadFile(url, "POST", path);
}
Run Code Online (Sandbox Code Playgroud)
在使用HttpRequest时:
public Stream sendFile(string path)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://myserver/receive");
string USERNAME = "myUser";
string PSSWD = "myPass";
NetworkCredential creds = new NetworkCredential(USERNAME, PSSWD);
request.Credentials = creds;
request.Method = "POST";
request.ContentType = "application/gzip";
request.Headers.Set("Cookie", "location=1234; date=20100226; time=1630; data=service; data-ver=2");
FileInfo fInfo = new FileInfo(path);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
byte[] data = br.ReadBytes((int)numBytes);
br.Close();
fStream.Close();
fStream.Dispose();
Stream wrStream = request.GetRequestStream();
BinaryWriter bw = new BinaryWriter(wrStream);
bw.Write(data);
bw.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response.GetResponseStream();
}
Run Code Online (Sandbox Code Playgroud)
dug*_*gas 10
首先,使用类似fiddler的东西并检查请求和响应,以查看curl和System.Net.WebClient之间的区别.
此外,您可以尝试(尽管使用调试代理检查应该允许您查明差异):
使用凭据缓存设置基本身份验证的凭据:
var cc= new CredentialCache();
cc.Add(new Uri(url),
"Basic",
new NetworkCredential("USERNAME", "PASSWORD"));
wc.Credentials = cc;
Run Code Online (Sandbox Code Playgroud)
设置用户代理标头:
string _UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
wc.Headers.Add(HttpRequestHeader.UserAgent, _UserAgent);
Run Code Online (Sandbox Code Playgroud)
更改WebRequest上的协议版本:
reqeust.KeepAlive = false;
request.ProtocolVersion=HttpVersion.Version10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8238 次 |
| 最近记录: |