2011-05-23 60 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