Python Django-登录到远程登录页面
我想通过django登录到一个外部远程页面 我的意思是使用django,将用户名和密码发送到该站点,在logine.g之后获取页面的html文件,并执行一些jQuery从tahat页面提取一些需要的数据!Python Django-登录到远程登录页面,python,django,login,Python,Django,Login,我想通过django登录到一个外部远程页面 我的意思是使用django,将用户名和密码发送到该站点,在logine.g之后获取页面的html文件,并执行一些jQuery从tahat页面提取一些需要的数据! 我在PHP中搜索并发现CURL做了我想做的事情,但是我应该如何在Django??< /P> < P>当做这样的任务时,有两个方面需要考虑。首先,如果你控制了你想与之交流的网站,其次,如果该网站有没有API。您需要使用不同的库,具体取决于这些库 如果你想访问的网站有一个API,你可以直接从你的程
我在PHP中搜索并发现CURL做了我想做的事情,但是我应该如何在Django??< /P> < P>当做这样的任务时,有两个方面需要考虑。首先,如果你控制了你想与之交流的网站,其次,如果该网站有没有API。您需要使用不同的库,具体取决于这些库 如果你想访问的网站有一个API,你可以直接从你的程序与之通信,即调用方法并以“机器友好”的格式(如Json、XML等)获取结果。如果网站没有API,您需要模拟用户交互并解析HTML,在这些情况下,测试工具通常能很好地做到这一点 例如,如果要访问的站点是本地Django站点,则可以使用Django的测试工具:
>>> from django.test.client import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
'<!DOCTYPE html...'
如果您想要访问的网站有一个API,并且您通过REST调用(上面的请求库示例)来访问它,那么这会简单得多。根据您想要访问的网站,您可能已经有了一个Python库,它通常是这些API调用的包装器 经过多次搜索,终于找到了2种解决方案: 1使用这款令人惊叹的流行Django软件包: 正如它所说,我可以做到这一点:
import requests
r = requests.get('https://api.github.com', auth=('user', 'pass'))
print r.status_code
print r.headers['content-type']
# ------
# 200
# 'application/json'
2第二种解决方案是使用:
不,我想登录gmail.com!!我认为这不是我自己的站点,正如文档中所说:允许您以编程方式测试视图并与支持Django的应用程序交互,而不是登录到其他站点!这个答案仍然有效,因为它是一个一般性的答案。同样的指导方针适用于几乎所有的网站。特别是对于Gmail,我会使用它,它对。寻找站点的API是我在答案中给出的第二个建议。不,测试客户端是为您自己的站点,而不是其他没有任何API的站点!你是对的,对不起,我改进了答案。我希望现在说得通。再次感谢罗伯托!是的,答案是正确的!最酷的是,你的回答和我找到答案的时间完全一样:你可以在这里查看我的答案:D!!:
import requests
r = requests.get('https://api.github.com', auth=('user', 'pass'))
print r.status_code
print r.headers['content-type']
# ------
# 200
# 'application/json'
import urllib2
gh_url = 'https://api.github.com'
req = urllib2.Request(gh_url)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'user', 'pass')
auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)
urllib2.install_opener(opener)
handler = urllib2.urlopen(req)
print handler.getcode()
print handler.headers.getheader('content-type')
# ------
# 200
# 'application/json'