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 有啥区别