1

我正在使用以下代码向 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,它就可以工作。请帮忙,我哪里错了?

(PS 在 URL 中,我肯定会用密钥替换 APP_SECRET)

4

5 回答 5

2

您的查询字符串参数应该是 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));
于 2011-08-17T18:41:26.413 回答
1

您必须对 URL 的参数进行编码。您可以使用 HttpUtility 类对参数进行编码。

于 2011-08-17T18:41:27.530 回答
0

很可能您需要指定用户代理以满足服务器的某些检查逻辑:

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)";

试试这个,看看它是否有帮助。

于 2011-08-17T18:41:22.410 回答
0

重定向 URL 必须与您在获取代码时发布的 URL 相同。

请检查这篇文章,帮助我!
http://www.ronaldwidha.net/2011/03/24/facebook-oauth-access_token-return-http-400-error-validating-verification-code/

于 2012-08-29T13:44:45.293 回答
0

这就是发生在我身上的事情以及如何解决这个问题:

  1. 将用户重定向到

    https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL

  2. 用户点击允许后,它会点击我们的重定向 Uri

  3. 那时我们将获取代码,我们需要对以下 Url 执行服务器端 HTTP Get 以将代码与我们的 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 响应。

因此,经过一些研究,我发现redirect_uri我们提交的step 3内容除了验证请求之外没有任何作用。因此,该值需要与步骤 2 匹配。

简而言之 :

redirect_uri 必须同时匹配step 2step 3

于 2017-09-05T09:43:55.210 回答