我想通过django
登录外部远程页面http://example.com/login
我的意思是使用django,向该站点发送用户名和密码,并在登录后获取页面的html文件(例如http://example.com/index),并做一些jQuery从tahat页面中提取一些想要的数据!
我搜索并发现(在php中卷曲确实以我想要的方式)但是我应该如何在django中做到这一点?
答案 0 :(得分:2)
执行此类任务时需要考虑两个方面。首先,如果您控制了要与之通信的网站,其次,如果网站有API。您需要根据这些使用不同的库。
如果您要访问的网站具有API,您将能够直接从您的程序与其进行通信,即调用方法并以“机器友好”格式(如Json,XML等)获取结果。如果网站没有API,您需要模仿用户交互并解析HTML,对于这些情况,测试工具通常可以很好地完成此任务。
例如,如果您要访问的站点是本地Django站点,您可以使用Django测试工具中的the test client:
>>> 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...'
一旦你做了这个电话,你就不会使用jQuery而是使用python。你通常会在response.content中找到答案,你可能需要解析它,假设你得到一个html。
如果您要访问的网站是第三方网站,我会使用requests library,您需要写下这样的内容:
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
如果您要访问的网站具有API并且您通过REST调用访问它,这将是更简单的,这是上面的请求库示例。根据您要访问的网站,您可能已经拥有一个Python库,它通常是这些API调用的包装器。
答案 1 :(得分:2)
经过大量的搜索,终于找到了2个解决方案:
1)使用这个惊人的流行 Django包:
的 Django Requests Package 强>
正如其documantation所说,我可以这样做:
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)第二个解决方案是使用Python URL Libray:
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'