2008-12-30 62 views
2

我似乎無法擺脫這個問題。我使用HttpWebRequest嘗試將一些數據發送到另一個站點。我試圖找出配置防火牆的最佳方式,但我不知所措。通過觀察NetMon的蹤跡,看起來好像忽略了我所說的;我看到的HTTP頭從請求中出來(不是瀏覽器到我的服務器請求,而是我的服務器到遠程服務器請求)不會加起來。瞭解與.NET的HttpWebRequest的SSL連接

Http: Request, CONNECT some.random.url:443 
Command: CONNECT 
URI: some.random.url:443 
    Location: some.random.url:443 
ProtocolVersion: HTTP/1.1 
Host: some.random.url 
ProxyConnection: Keep-Alive 
HeaderEnd: CRLF 

的TCP DstPort也似乎總是與HTTP(80)開始。無論如何,我似乎無法在最初處理443個問題;在開始「真正的」傳輸之前,SSL是否開始與端口80協商?要啓動,這個請求似乎忽略了我在嘗試設置請求之前設置的任何HttpWebRequest設置:即使我設置了HTTP 1.0,或者保持活動爲false,它仍然以上述標題開頭。

它在做什麼?我想知道如何讓它通過,但我不知道它爲什麼表現出這種行爲?

下面的代碼,如果有幫助。

Uri newUri = new Uri("https://some.random.url:443/random"); 
System.Net.HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(newUri); 
wr.Method = "POST"; 
wr.ContentType = "application/x-www-form-urlencoded"; 
ASCIIEncoding encoding = new ASCIIEncoding(); 
byte[] requestBytes = encoding.GetBytes("test"); 
wr.ContentLength = requestBytes.Length; 
System.IO.Stream stream = wr.GetRequestStream(); //FAILS HERE, ServerProtocolViolation 

我已經搜遍谷歌和其他SSL/HttpWebRequest的問題,但不能拿出一個銀色的子彈。

回答

4

您的問題似乎是您的ASP.NET服務器和遠程服務器之間的代理服務器。您可以嘗試不使用代理服務器(wr.Proxy = null),但可能需要您的網絡設置。

我建議與誰負責你的服務器所在的網絡,並且看看代理是否支持SSL傳遞(通過CONNECT命令.NET代表你發送)。

0

我已經完成了HttpWebRequest通過SSL調用,並從未遇到過這個問題。我能看到你做的我從未做過的唯一事情是在URL中包含端口號(443)。

當您使用https協議時,.NET應該處理創建SSL連接時不知道使用哪個端口。如果你還沒有,嘗試沒有端口號。如果你有,那麼我的想法;)

0

試試這個,讓我知道你是如何找到它的!

htw.Credentials = new NetworkCredentials(username,password)