在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 2step 3

【讨论】:

以上是关于在c#用httpwebrequest中发送get/http/https请求后,怎么获得数据的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpWebRequest GET HTTP HTTPS 请求

使用 C# 和 HttpWebRequest 向端点发送 POST 请求

用C#代码 get请求获取网页响应代码,通过HttpWebRequest的GetResponse()方法报异常,我想获取这相应代码

C#中HttpWebRequest的用法详解

GJM : C# HttpWebRequest GET HTTP HTTPS 请求

C#通过WebClient/HttpWebRequest实现http的post/get方法