【问题标题】:getResponse in c# not working. No response coming backc# 中的 getResponse 不起作用。没有回复回来
【发布时间】:2011-05-23 19:56:02
【问题描述】:

我在 C# 中有这段代码:

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 并且其中有数据。 哪里出错了?

【问题讨论】:

  • test.abc.com/newtest .. 普通网址
  • @henk。是的,我确实等了 30 多秒。
  • 尝试将http 添加到您的网址。如果有的话,它应该抛出UriFormatException,所以我不确定它为什么会挂在那条线上。
  • 这可能是防火墙问题。您的安全可能允许来自浏览器(IE/Firefox/Safari)的请求通过端口 80 发布请求,但可能不允许来自您的应用的 HttpWebRequest。

标签: c# httpwebrequest httpwebresponse


【解决方案1】:

尝试关闭变量 newStream 中的请求流。也许 API 会等待它完成。

【讨论】:

【解决方案2】:

你必须增加限制:

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

【讨论】:

    【解决方案3】:

    尝试简化您的代码并伪造用户代理。也许该网站正在阻止/限制刮板/机器人。还要确保您的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);
    }
    

    【讨论】:

      【解决方案4】:

      当我早些时候发表评论时,我已经在我的办公室运行了你的代码(严重防火墙)我得到了与你相同的结果。回到家,再次尝试(较少防火墙)它工作正常......我猜你在那里有一个障碍。我相信您正面临防火墙问题。

      【讨论】:

        【解决方案5】:

        使用 content-length=0

        例子:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多