响应网址与初始浏览器网址

时间:2017-12-21 23:57:59

标签: python-3.x facebook url python-requests

我在浏览器上尝试使用与最初显示的内容不同的网址

Facebook的文档说a Login Request 应该有这样的格式,所以使用请求和urllib.parse我尝试获取响应URL

import requests, facebook, logging

# REQUIRED AUTHENTICATION PARAMS
APP_ID = '1976346389294466'
APP_SECRET = '*************************'
REDIRECT_URI = 'https://www.facebook.com/connect/login_success.html/'

logging.basicConfig(level=logging.DEBUG)
perms = ['manage_pages','publish_pages']
fb_login_url = facebook.auth_url(app_id=APP_ID, canvas_url=REDIRECT_URI, perms=perms)
logging.debug("-----LOGIN URL:" + fb_login_url)

response = requests.get(fb_login_url, params={'response_type':'token'}, allow_redirects=True)
try:
    response.raise_for_status()
except Exception as exec:
    print("%(There was a problem)s" % (exec))

response = requests.get(response.url)
logging.debug("-----Response URL: "+response.url)

我期待格式为<{p>的Expected Return URL

https://www.facebook.com/connect/login_success.html#
    access_token=ACCESS_TOKEN...

但是,当我使用浏览器时,我只得到正确的响应,在我的程序中,响应返回一个完全不同格式的URL

https://www.facebook.com/login.php?skip_api_login=1&api_key=xxxxxxxxx&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv2.11%2Fdialog%2Foauth%3Fredirect_uri%3Dhttps%253A%252F%252Fwww.facebook.com%252Fconnect%252Flogin_success.html%252F%26scope%3Dmanage_pages%252Cpublish_pages%26response_type%3Dtoken%26client_id%xxxxxxxxxxx%26ret%3Dlogin%26logger_id%xxxxxxxxxxxxxxx&cancel_url=https%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html%2F%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&display=page&locale=en_US&logger_id=xxx-xxxxx-xxxxx-xxxxxxxx

当我从response.history的最后一个重定向网址获取时, 响应返回一个url到自己,所以我不知道如何去捕获 url的初始值,例如当我使用浏览器时

问题是,除了URL本身,我不会从响应中寻找其他任何东西。

附加说明:

- 在获取响应网址后的浏览器中我认为javascript也会在出于安全原因的短暂时间后将网址更改为空白

- 当我向浏览器输入错误的格式化网址时,它会重定向到正确的值,因此当我使用浏览器时,会有不同的处理响应的内容。如果是这样,如何抓住正确的网址?

简单地说

当我在浏览器中输入fb_login_url时,我得到了......

https://www.facebook.com/connect/login_success.html#access_token=ACCESS_TOKEN...

这就是我想要的,但是 当我在应用程序中执行请求时... 使用requests.get(fb_login_url).url 或(因为303)类似

for r in response.history:
requests.get(r.url).url

我得到了错误的网址

https://www.facebook.com/login.php?skip_api_login=1&api_key=xxxxxxxxx&signed_next=1&n....

0 个答案:

没有答案