Tamam, işte anlaşma. Soru olarak, bir dosyayı bir web sunucusuna POST yapmaya çalışıyorum ve birkaç sorun yaşıyorum.Sunucuyu HttpWebRequest veya WebClient'e İletmek için .NET Kullanma
Aynı dosyayı Curl.exe kullanarak aynı web sunucusuna göndermeyi denedim ve sorun yaşamadım. Ben .NET sınıfları ile sorun yaşıyorum neden herhangi bir potansiyel nedenleri işaret edebilir, ancak curl ile kullanılan bayraklar gönderdim.
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
Ben WebClient'a gibi bir .NET sınıfını kullanmaya çalışıyorum ya HttpWebRequest aynı şeyi yapmak. İşte denediğim kodun bir örneği. WebClient ile 505 HTTP Sürümü Desteklenmeyen bir hata alıyorum ve HttpWebRequest ile 501 Uygulanmadı.
bir WebClient'a ile çalışırken:
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);
}
Ve HTTPRequest kullanırken:
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();
}
fark tel üzerinden iki çağrı arasında tam olarak ne olduğunu görmek için bir hata ayıklama http proxy kullan: aşağıdaki satırı bir zorunluluktur. Charles'ı (http://www.charlesproxy.com/) veya Fiddler'ı (http://www.fiddler2.com/fiddler2/) deneyin. –