2011-05-23 59 views
3

我有這樣的代碼在C#:c#中的getResponse不起作用。無響應回來

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Timeout = 30000; 
request.Method = "POST"; 
request.KeepAlive = true; 
request.AllowAutoRedirect = false; 

Stream newStream = request.GetRequestStream(); 
newStream.Write(bPostData, 0, bPostData.Length); 

byte[] buf = new byte[1025]; int read = 0; string sResp = ""; 
HttpWebResponse wResp = (HttpWebResponse)request.GetResponse(); 
Stream resp = wResp.GetResponseStream(); 

HttpWebResponse wResp =...剛剛掛起(在沒有從URL響應)。我不確定究竟是在哪裏崩潰(因爲我甚至沒有發生異常錯誤)。我在IE中測試了URL,它工作正常。我也檢查了bPostData,並且其中有數據。 哪裏出問題了?

+0

是什麼'url'樣子? – 2011-05-23 20:00:21

+0

你等了30多秒? – 2011-05-23 20:00:42

+0

http://test.abc.com/newtest ..普通網址 – askeei 2011-05-23 20:01:06

回答

3

嘗試在變量newStream中關閉請求流。也許API等待它完成。

+0

您絕對應該關閉請求流。否則,不能保證所有的發佈數據都會被寫入。如果您不關閉流,則可能會很快耗盡連接。請參閱http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx上的備註。 – 2011-05-23 22:44:49

0

嘗試簡化您的代碼並僞造用戶代理。也許該網站阻止/限制刮板/機器人。同時確保您的application/x-www-form-urlencoded HTTP POST值已正確編碼。爲此,我建議你WebClient

using (var client = new WebClient()) 
{ 
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"; 
    var values = new NameValueCollection 
    { 
     { "param1", "value1" }, 
     { "param2", "value2" }, 
    }; 
    byte[] result = client.UploadValues(url, values); 
} 
0

當我在前面的評論,我已經在我的辦公室(重防火牆)運行你的代碼我給你做了同樣的結果。回家後,再次嘗試(防火牆較少),它工作正常......我猜你在那裏有障礙。我相信你正面臨防火牆問題。

0

使用內容長度= 0

例子:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL); 
     request.Method = "POST"; 
     request.ContentLength = 0; 
     var requestStream = request.GetRequestStream(); 
     HttpWebResponse res = (HttpWebResponse)request.GetResponse(); 
     res.Close(); 
1

你必須增加限制:

ServicePointManager.DefaultConnectionLimit = 10; // Max number of requests