渴望开始? 这个页面给了一个很好的建议如何使用Requests: 首先,确保: 1.Requests is installed 2.Requests is up-to-date node2:/root#pip install Requests Requirement already satisfied: Requests in /usr/local/python27/lib/python2.7/site-packages Requirement already satisfied: urllib3<1.23,>=1.21.1 in /usr/local/python27/lib/python2.7/site-packages (from Requests) Requirement already satisfied: idna<2.7,>=2.5 in /usr/local/python27/lib/python2.7/site-packages (from Requests) Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/python27/lib/python2.7/site-packages (from Requests) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/python27/lib/python2.7/site-packages/certifi-2018.4.16-py2.7.egg (from Requests) You are using pip version 9.0.1, however version 10.0.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command. You have mail in /var/spool/mail/root 让我们开始一些简单例子: 做一个请求: 现在,让我们尝试得到一个webpage,对于这个例子 做一个请求: 使用requests 是非常简答的 通过导入模式是非常简单的 import requests 现在, 让我们尝试去得到一个webpage,对于这个例子 import requests import json r = requests.get('https://api.github.com/events') print type(r) r= r.text print type(r) s=json.loads(r) #print s print type(s) print s[0] print '---------------------------------------' print s[0]['payload']['head'] 现在,我们有一个响应对象称为r 我们可以得到所有的信息从这个对象 import requests import json r = requests.get('https://api.github.com/events') print type(r) C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a19.py <class 'requests.models.Response'> <Response [200]> Requests的简单的API 意味着 所有的HTTP 请求的形式是显而易见的。 比如,如何进行一个HTTP POST请求 早URL 中传递参数 你通常希望发送某种类型的数据在URL的查询字符串里。 如果手动构建URL,这些值是以key/value 在一个问号后面 httpbin.org/get?key=val 齐全能够允许你提供那些参数作为字符串字典, 使用params关键 >>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get('http://httpbin.org/get', params=payload) def ip_range(req): print req.get_full_path() start=req.GET['start'] stop=req.GET['stop'] startip=start.split('.')[-1]; stopip=stop.split('.')[-1]; f1=start.split('.')[0]; f2=start.split('.')[1]; f3=start.split('.')[2]; f4=f1+'.'+f2+'.'+f3 print f4 url(r'^api/ip_range/$', newview.ip_range), http://192.168.137.3:9000/api/ip_range/?start=192.168.32.100&stop=192.168.32.110 import requests import json payload = {'start': '192.168.32.100', 'stop': '192.168.32.110'} r = requests.get('http://192.168.137.3:9000/api/ip_range', params=payload) print r.text C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a19.py [["192.168.32.101", "dr-mysql", "env-backup"], ["192.168.32.102", "sftp", "env-test"], ["192.168.32.100", "unknown", "env-test"]] Process finished with exit code 0 你可以看到URL 已经被正确的encoded 通过打印URL: import requests import json payload = {'start': '192.168.32.100', 'stop': '192.168.32.110'} r = requests.get('http://192.168.137.3:9000/api/ip_range', params=payload) print r.text print(r.url) C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a19.py [["192.168.32.101", "dr-mysql", "env-backup"], ["192.168.32.102", "sftp", "env-test"], ["192.168.32.100", "unknown", "env-test"]] http://192.168.137.3:9000/api/ip_range/?start=192.168.32.100&stop=192.168.32.110 # !/usr/bin/env python # -*- coding: utf-8 -*- import requests import json payload = {'start': '测试', 'stop': '192.168.32.110'} r = requests.get('http://192.168.137.3:9000/api/ip_range', params=payload) print(r.url) C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a19.py http://192.168.137.3:9000/api/ip_range/?start=%E6%B5%8B%E8%AF%95&stop=192.168.32.110 响应内容: 我们可以读取服务器响应的内容,再次考虑GitHub timeline again: # !/usr/bin/env python # -*- coding: utf-8 -*- import requests r = requests.get('https://api.github.com/events') print r.text 请求会自动的解码从服务器返回的内容,Unicode 字符集是无缝解码 请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它: 二进制响应内容 你也能以字节的方式请求响应提,对于非文本请求: JSON 响应内容 Requests 中也有一个内置的JSON解码器,助你处理JSON数据: import requests import json payload = {'start': '192.168.32.100', 'stop': '192.168.32.110'} r = requests.get('http://192.168.137.3:9000/api/ip_range', params=payload) print r.json() C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a19.py [[u'192.168.32.101', u'dr-mysql', u'env-backup'], [u'192.168.32.102', u'sftp', u'env-test'], [u'192.168.32.100', u'unknown', u'env-test']] 定制请求头: 如果你想为请求添加HTTP头部,只要简单地传递一个dict给headers参数就可以 例如,在前一个示例中我们没有指定content-type: Accept text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate, br Accept-Language zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Connection keep-alive Cookie BAIDUID=0112786531976C6BEF22D3…_CK_SAM=1; PSINO=7; BD_HOME=0 Host www.baidu.com Upgrade-Insecure-Requests 1 User-Agent Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/60.0 import requests import json url = 'https://baidu.com' r=requests.get(url) print r.headers 更加复杂的POST请求: 通常,你想要发送一些编码为表单形式的数据--非常像一个HTML表单,要实现这个,只需简单地产地一个字典给data参数。 你的数据字典 在发出请求时会自动编码为表单形式: # !/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import urllib import cookielib import json import httplib import re import requests s = requests.session() print s.headers url = "https://licai.yingyinglicai.com/user/login.htm" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Host': 'licai.yingyinglicai.com', 'Referer': 'https://licai.yingyinglicai.com/index.htm', } r = s.get(url, headers=headers) r = r.text # print s print type(r) r = r.encode('unicode-escape') print type(r) p = re.compile('.*token"\s+value="(.*?)".*') m = p.match(r) token = m.group(1) print token login_url = 'https://licai.yingyinglicai.com/user/loginByPwd.do' data = {'cell': '18072722237', 'password': 'xx', 'token': token} # data = urllib.urlencode(data) r = s.post(login_url, data=data, headers=headers) print r.status_code print r.headers['content-type'] print r.encoding print r.text POST一个多部分编码(Multipart-Encoded)的文件 Requests 使得上传多部分编码文件变得很简单: Cookie: 如果某个响应中包含一些cookie,你可以快速访问它们: JSESSIONID httpOnly true path / value 2AA66E3B3802DAA7CA19C5A4EB336E8C YYLCSJSESSIONID domain yingyinglicai.com expires 2018-05-30T08:41:16.000Z path / value 7fd936d6-a117-497b-a095-bc01f25d4c09
requests 快速上手
猜你喜欢
转载自blog.csdn.net/zhaoyangjian724/article/details/80513187
今日推荐
周排行