我使用以下代码向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)
答案 0 :(得分: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));
答案 1 :(得分:1)
您必须对网址的参数进行编码。您可以使用HttpUtility类 用于编码参数。
答案 2 :(得分: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)";
试一试,看看它是否有帮助。
答案 3 :(得分:0)
重定向网址必须与您在获取代码时提供的网址相同。
请查看这篇文章,帮帮我! http://www.ronaldwidha.net/2011/03/24/facebook-oauth-access_token-return-http-400-error-validating-verification-code/
答案 4 :(得分:0)
这就是我发生的事情,以及如何解决这个问题:
将用户重定向到
https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL
用户点击“允许”后,它会点击我们的重定向Uri
此时我们将获得代码,我们需要做一个服务器端 HTTP访问以下Url以与我们的oAuth交换代码 访问令牌:
现在在第3步,我继续收到Http 400回复。
经过一些研究后,我发现我们在redirect_uri
上提交的step 3
除了验证请求之外没有做任何事情。因此,值需要匹配与步骤2。
简而言之:
redirect_uri必须与step 2
和step 3