HttpWebRequest GetResponse() 不返回任何内容

Posted

技术标签:

【中文标题】HttpWebRequest GetResponse() 不返回任何内容【英文标题】:HttpWebRequest GetResponse() not returning anything 【发布时间】:2014-01-22 07:03:44 【问题描述】:

我编写了一个代码来调用一个返回一些数据的网站。我使用了HttpWebRequest.GetResponse() 方法。当我在浏览器中点击 url 时,它会返回数据。但是在我的 C# 代码中,有时它会返回数据,有时它什么也不返回。

请求没有抛出任何错误,例如超时或访问被拒绝。它什么也不返回。 如果我在代码中使用调试器,它会返回数据。

代码如下;

HttpWebRequest clnt = (HttpWebRequest)HttpWebRequest.Create(restURL);
var resp = clnt.GetResponse();
if ((resp.ContentLength > 0))

    using (System.IO.StreamReader str = new System.IO.StreamReader(resp.GetResponseStream()))
    
        if (str != null)
        
            string response = str.ReadToEnd();
            str.Close();
            return response;
        
    

如果我遗漏了什么,请帮助我。

【问题讨论】:

您缺少using 声明的一件事 - 您应该确保您始终处理网络响应,即使没有内容。您还没有说明失败情况下会发生什么 - 请求是否真正完成,但没有内容,或者只是超时?另请注意,您的空值检查毫无意义 - 您刚刚调用了构造函数,因此 str 永远不能为空。 如果你没有对 HttpWebRequest 做任何特别的事情,你可以使用 WebClient: using (var client = new WebClient()) string response = client.DownloadString(restUrl); 请求没有抛出任何错误,例如超时或访问被拒绝。它什么也不返回。如果我在代码中使用调试器,它会返回数据 【参考方案1】:

您是否尝试过提供方法和内容类型?

clnt.Method = "POST";
clnt.ContentType = "application/x-www-form-urlencoded";

它会是这样的:

HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(url);

        httpWReq.Method = "POST";
        httpWReq.ContentType = "application/x-www-form-urlencoded";

        HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();

        string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
        return responseString;

希望对你有帮助!

【讨论】:

我收到一个错误,因为远程服务器返回了一个错误:(411) 长度要求。 嗯..那一定是因为你必须 POST 。当您发出 POST HttpWebRequest 时,您必须指定要发送的数据的长度。如需代码请注明。 当你使用 HttpWebRequest 和 POST 方法时,你必须通过 RequestStream 设置一个内容(或者你喜欢的正文)。 不确定是什么原因。使用 GET 后,它现在正在返回数据。

以上是关于HttpWebRequest GetResponse() 不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

webrequest 和 httpwebrequest 有啥区别

上传速度问题:HttpWebRequest [重复]

HttpWebRequest.GetRequestStream() 超时

如何使用 HttpWebRequest 进行摘要身份验证?

如何异步使用 HttpWebRequest (.NET)?

POST请求——HttpWebRequest