1

次のコードを使用して、get リクエストを facebook グラフ api oauth サーバーに送信しています。

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 は、コードを取得するときに投稿したものと同じである必要があります。

この記事をチェックしてください、助けてくれました!
http://www.ronaldwidha.net/2011/03/24/facebook-oauth-access_token-return-http-400-error-validating-verification-code/

于 2012-08-29T13:44:45.293 に答える