如果我以编程方式创建Facebook测试用户,login_url
则新用户的无效。提取login_url会返回404错误。
精简示例(在Python中)。最后两行是出现问题的地方:
import requests
from urlparse import parse_qs
APP_ID = "<Facebook App ID>"
APP_SECRET = "<Facebook Client Secret>"
# Get app access token - this works
response = requests.get('https://graph.facebook.com/oauth/access_token',
params={'grant_type': "client_credentials",
'client_id': APP_ID, 'client_secret': APP_SECRET})
app_access_token = parse_qs(response.content)['access_token'][0]
# Create test user - this works
response = requests.post('https://graph.facebook.com/%s/accounts/test-users' % APP_ID,
data={'access_token': app_access_token, 'installed': "true"})
test_user = response.json()
login_url = test_user['login_url']
print login_url # http://developers.facebook.com/checkpoint/test-user-login/...
# Get cookied for login - see https://stackoverflow.com/a/5370869/647002
session = requests.Session()
session.get("https://www.facebook.com/", allow_redirects=True)
# Login test user - THIS FAILS
response = session.get(login_url)
print response.status_code # 404
其他人指出,必须首先获取Facebook主页,然后测试用户的login_url才能起作用。我们遇到了同样的问题,我在上面没有任何运气就包括了这种解决方法。[编辑:添加了_fb_noscript=1
查询参数,对于非JavaScript测试客户端,此参数将于2015年中开始。] [编辑8/2017:现在已删除_fb_noscript=1
;不再需要,并设置一个noscript
cookie,该cookie使以后的某些FB身份验证请求返回500。]
我还尝试直接在浏览器中打开login_url:
最后一点似乎可以确认正在正确创建测试用户,并且我具有正确的login_url。但是,当然,这对自动化测试没有帮助。(我们不想运行登录到我的开发者帐户的测试。)
有没有其他方法可以将测试用户的login_url用于自动化测试?
Facebook的开发者支持工程师已经证实,测试用户login_url
不再能用于测试用户自动登录,出于安全性的变化。显然,它是用于手动测试的。
我是,但是,能够通过张贴到Facebook的正常登录形式,实现了编程方式创建的Facebook测试用户自动登录。似乎您所需要的只是从create-test-user API返回的电子邮件和密码。(尽管您仍然需要先提取Cookie,但似乎不需要其他登录表单字段。)
下面的代码现在对我有用(替换原始问题中的最后两行“此失败”代码):
# Login test user - THIS WORKS
response = session.post("https://www.facebook.com/login.php",
data={'email': test_user["email"],
'pass': test_user["password"]})
print response.status_code # 200
我在任何地方都找不到此文档,Facebook将来可能会更改其登录形式,因此YMMV。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句