在c#用httpwebrequest中发送get/http/https请求后,怎么获得数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c#用httpwebrequest中发送get/http/https请求后,怎么获得数据相关的知识,希望对你有一定的参考价值。
public string Get(string url)HttpWebRequest request;
// 创建一个HTTP请求
request = (HttpWebRequest)WebRequest.Create(url);
//request.Method="get";
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.Unicode);
string responseText = myreader.ReadToEnd();
myreader.Close();
return responseText;
参考技术A StreamReader中的readtoend方法来获得返回的数据。
在 C# 中使用 GetResponseStream() 获取“(400)错误请求”
【中文标题】在 C# 中使用 GetResponseStream() 获取“(400)错误请求”【英文标题】:Getting '(400) Bad Request' with GetResponseStream() in C# 【发布时间】:2011-08-17 17:49:16 【问题描述】:我正在使用以下代码向 facebook graph api oauth 服务器发送 get 请求。
public string GetAccessToken(string code)
HttpWebRequest req = (HttpWebRequest) WebRequest.Create(@"https://graph.facebook.com/oauth/access_token?client_id=249725835046216&redirect_uri=http://localhost:2794/&client_secret=APP_SECRETa&code=" + code);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
string response=res.GetResponseStream().ToString();
return response;
以上代码抛出如下异常:
The remote server returned an error: (400) Bad Request.
同时,如果我在浏览器中输入相同的 url,它就可以工作。请帮忙,我哪里错了?
(P.S 在 URL 中,我肯定会用密钥替换 APP_SECRET)
【问题讨论】:
【参考方案1】:您的查询字符串参数应该是 UrlEncoded:
HttpWebRequest req = (HttpWebRequest) WebRequest.Create(@"https://graph.facebook.com/oauth/access_token?client_id=249725835046216&redirect_uri=" + UrlEncode("http://localhost:2794/") + "&client_secret=" + UrlEncode(APP_SECRET) + "&code=" + UrlEncode(code));
【讨论】:
【参考方案2】:您必须对 URL 的参数进行编码。您可以使用 HttpUtility 类 用于编码参数。
【讨论】:
【参考方案3】:很可能你需要指定用户代理来满足服务器的一些检查逻辑:
HttpWebRequest req = (HttpWebRequest) WebRequest.Create(@"https://...&code=" + code);
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
试试这个,看看是否有帮助。
【讨论】:
【参考方案4】:重定向 URL 需要与您在获取代码时发布的 URL 相同。
请查看这篇文章,对我有帮助!http://www.ronaldwidha.net/2011/03/24/facebook-oauth-access_token-return-http-400-error-validating-verification-code/
【讨论】:
【参考方案5】:这就是发生在我身上的事情以及如何解决这个问题:
将用户重定向到
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL
用户点击允许后,会点击我们的重定向Uri
那时我们会得到代码,我们需要做一个服务器端 HTTP 获取以下 URL 以与我们的 oAuth 交换代码 访问令牌:
https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
现在在第 3 步,我不断收到 Http 400 响应。
所以经过一些研究,我发现我们在step 3
上提交的redirect_uri
除了验证请求之外没有任何作用。因此,该值需要与步骤 2 匹配。
简而言之:
redirect_uri 必须同时匹配 step 2
和 step 3
【讨论】:
以上是关于在c#用httpwebrequest中发送get/http/https请求后,怎么获得数据的主要内容,如果未能解决你的问题,请参考以下文章
C# HttpWebRequest GET HTTP HTTPS 请求
使用 C# 和 HttpWebRequest 向端点发送 POST 请求
用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码