捕获HTTP 307重定向URL

时间:2015-01-23 03:45:05

标签: c# facebook facebook-graph-api oauth

我正在调用Facebook API,并尝试从响应中捕获访问令牌

当我拨打以下网址时:

https://www.facebook.com/dialog/oauth?client_id={client_id}&display=popup&redirect_uri=http://www.facebook.com/connect/login_success.html&response_type=token

如果我已经登录,我会快速重定向到显示访问令牌的网址,或者在我的浏览器中显示FB登录表单:

https://www.facebook.com/connect/login_success.html#access_token={access_token}&expires_in={time}

以上网址仅在最终重定向到:

之前显示一两秒钟
https://www.facebook.com/connect/blank.html#_=_

我的问题是,如何在第二个网址中捕获访问令牌

我一直在尝试通过以下方法捕获网址:

private void FBBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) {
    String urlResponse = e.Uri.ToString();
    Console.WriteLine("FB URL Response: " + urlResponse);
}

问题在于,侦听器选取的URL是我拨打电话的第一个网址,而不是我所追求的响应网址。

(请注意,出于安全考虑,我已从网址中删除了access_token和client_id)

附加说明 - 在对浏览器中的请求序列进行一些检查后,我注意到第一个响应是HTTP 302,后面是HTTP 307. 307响应的位置标题就是我需要使用C#进行解析,因为它包含访问令牌。

1 个答案:

答案 0 :(得分:0)

使用WPF Web浏览器控件时,在“#”符号后捕获字符似乎存在问题。这会导致访问令牌出现问题,因为它们在URL中返回如下:

#access_token='token_code'&expires_in='time'

此博客post涵盖了使用System.Windows.Controls.WebBrowser的变通方法。通过采用这种技术,我终于能够从URL解析访问令牌。

我希望这可以帮助其他可能遇到类似问题的人。