接口_requests_基于python
HTTP request python官方文档:http://cn.python-requests.org/zh_CN/latest/
1. 环境
基于环境,需要安装requests 模块,安装方法 pip install requests
想学习requests,就通过help吧
import requests help(requests)
返回结果如下:
C:\Python27\python.exe E:/test/interface/g_3.py Help on package requests: NAME requests FILE c:\python27\lib\site-packages\requests\__init__.py DESCRIPTION Requests HTTP Library ~~~~~~~~~~~~~~~~~~~~~ Requests is an HTTP library, written in Python, for human beings. Basic GET usage: >>> import requests >>> r = requests.get('https://www.python.org') >>> r.status_code 200 >>> 'Python is a programming language' in r.content True ... or POST: >>> payload = dict(key1='value1', key2='value2') >>> r = requests.post('http://httpbin.org/post', data=payload) >>> print(r.text) { ... "form": { "key2": "value2", "key1": "value1" }, ... } The other HTTP methods are supported - see `requests.api`. Full documentation is at <http://python-requests.org>. :copyright: (c) 2017 by Kenneth Reitz. :license: Apache 2.0, see LICENSE for more details. PACKAGE CONTENTS __version__ _internal_utils adapters api auth certs compat cookies exceptions help hooks models packages sessions status_codes structures utils FUNCTIONS check_compatibility(urllib3_version, chardet_version) DATA __author__ = 'Kenneth Reitz' __author_email__ = 'me@kennethreitz.org' __build__ = 137220 __cake__ = u'\u2728 \U0001f370 \u2728' __copyright__ = 'Copyright 2017 Kenneth Reitz' __description__ = 'Python HTTP for Humans.' __license__ = 'Apache 2.0' __title__ = 'requests' __url__ = 'http://python-requests.org' __version__ = '2.18.4' codes = <lookup 'status_codes'> VERSION 2.18.4 AUTHOR Kenneth Reitz Process finished with exit code 0
获取requests所有的方法和类,就使用dir吧
import requests print dir(requests)
返回如下:
['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', 'RequestException', 'RequestsDependencyWarning', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__author_email__', '__build__', '__builtins__', '__cake__', '__copyright__', '__description__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__url__', '__version__', '_internal_utils', 'adapters', 'api', 'auth', 'certs', 'chardet', 'check_compatibility', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'urllib3', 'utils', 'warnings']
2. HTTP协议:
根据 HTTP 标准, HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了五种请求方法: 共GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法
3. requests模块入门:
#HTTP请求类型 #get类型 r = requests.get('https://github.com/timeline.json') #post类型 r = requests.post("http://m.ctrip.com/post") #put类型 r = requests.put("http://m.ctrip.com/put") #delete类型 r = requests.delete("http://m.ctrip.com/delete") #head类型 r = requests.head("http://m.ctrip.com/head") #options类型 r = requests.options("http://m.ctrip.com/get") #获取响应内容 print r.content #以字节的方式去显示,中文显示为字符 print r.text #以文本的方式去显示 #URL传递参数 payload = {'keyword': '日本', 'salecityid': '2'} r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload) print r.url #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=日本 #获取/修改网页编码 r = requests.get('https://github.com/timeline.json') print r.encoding r.encoding = 'utf-8' #json处理 r = requests.get('https://github.com/timeline.json') print r.json() #需要先import json #定制请求头 url = 'http://m.ctrip.com' headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'} r = requests.post(url, headers=headers) print r.request.headers #复杂post请求 url = 'http://m.ctrip.com' payload = {'some': 'data'} r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下 #post多部分编码文件 url = 'http://m.ctrip.com' files = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files) #响应状态码 r = requests.get('http://m.ctrip.com') print r.status_code #响应头 r = requests.get('http://m.ctrip.com') print r.headers print r.headers['Content-Type'] print r.headers.get('content-type') #访问响应头部分内容的两种方式 #Cookies url = 'http://example.com/some/cookie/setting/url' r = requests.get(url) r.cookies['example_cookie_name'] #读取cookies url = 'http://m.ctrip.com/cookies' cookies = dict(cookies_are='working') r = requests.get(url, cookies=cookies) #发送cookies #设置超时时间 r = requests.get('http://m.ctrip.com', timeout=0.001) #设置访问代理 proxies = { "http": "http://10.10.10.10:8888", "https": "http://10.10.10.100:4444", } r = requests.get('http://m.ctrip.com', proxies=proxies)
4、Requests示例
json请求
#!/user/bin/env python #coding=utf-8 import requests import json class url_request(): def __init__(self): """ init """ if __name__=='__main__': headers = {'Content-Type' : 'application/json'} payload = {'CountryName':'中国', 'ProvinceName':'陕西省', 'L1CityName':'汉中', 'L2CityName':'城固', 'TownName':'', 'Longitude':'107.33393', 'Latitude':'33.157131', 'Language':'CN' } r = requests.post("http://www.xxxxxx.com/CityLocation/json/LBSLocateCity",headers=headers,data=payload) #r.encoding = 'utf-8' data=r.json() if r.status_code!=200: print "LBSLocateCity API Error " + str(r.status_code) print data['CityEntities'][0]['CityID'] #打印返回json中的某个key的value print data['ResponseStatus']['Ack'] print json.dumps(data,indent=4,sort_keys=True,ensure_ascii=False) #树形打印json,ensure_ascii必须设为False否则中文会显示为unicode
xml请求
#!/user/bin/env python #coding=utf-8 import requests class url_request(): def __init__(self): """ init """ if __name__=='__main__': headers = {'Content-type': 'text/xml'} XML = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><Request xmlns="http://tempuri.org/"><jme><JobClassFullName>WeChatJSTicket.JobWS.Job.JobRefreshTicket,WeChatJSTicket.JobWS</JobClassFullName><Action>RUN</Action><Param>1</Param><HostIP>127.0.0.1</HostIP><JobInfo>1</JobInfo><NeedParallel>false</NeedParallel></jme></Request></soap:Body></soap:Envelope>' url = 'http://jobws.push.mobile.xxxxxxxx.com/RefreshWeiXInTokenJob/RefreshService.asmx' r = requests.post(url,headers=headers,data=XML) #r.encoding = 'utf-8' data = r.text print data
我的猫在屋顶睡着了