Requests中文官方文档:http://cn.python-requests.org/zh_CN/latest/
其中,在ipython中利用自动补全看下调用requests之后返回的response对象的一些属性:
在ipython中利用自动补全看下调用requests之后返回的response对象的一些属性:
In [1]: import requests
In [2]: r = requests.get('https://api.github.com')
In [3]: r.
r.apparent_encoding r.history r.raw
r.close r.is_redirect r.reason
r.connection r.iter_content r.request
r.content r.iter_lines r.status_code
r.cookies r.json r.text
r.elapsed r.links r.url
r.encoding r.ok
r.headers r.raise_for_status
r.encoding是直接从响应头部信息Content-Type里获取页面编码, 而r.apparent_encoding是利用chardet检测r.content的编码得到的值.
r.content是响应内容的字节流(bytes),而r.text是将响应内容以r.encoding解码后得到的unicode对象.
r.raw可获得原始套接字响应,但必须在发出请求时设置stream=True,之后可使用read()方法读取.
requests的get()和post()请求可以接受params={}, data={}, headers={}, cookies={}, proxies={}, auth=(),等等一系列参数.
其他用法:
import requests
import json
#发送POST请求
#r = requests.post("http://httpbin.org/post")
#发送其他类型请求
#r = requests.put("http://httpbin.org/put")
#r = requests.delete("http://httpbin.org/delete")
#r = requests.head("http://httpbin.org/get")
#r = requests.options("http://httpbin.org/get")
#传递参数的GET请求
#payload = {'key1': 'value1', 'key2': 'value2'}
#r = requests.get("http://httpbin.org/get", params=payload)
#print(r.url)
#查看相应内容,会自动解码
#print(r.text)
其他响应项:
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
#查看,指定URL编码
#print(r.encoding)
#r.encoding = 'ISO-8859-1'
#以字节方式访问相应,会自动解码gzip和deflate压缩的数据
#print(r.content)
#创建图片
#from PIL import Image
#from io import StringIO
#i= Image.open(StringIO.StringIO(r.content))
#处理JSON数据
#import requests
#r=requests.get('https://github.com/timeline.json')
#print(r.json())
#返回原始相应内容
##>>> r = requests.get('https://github.com/timeline.json', stream=True)
##>>> r.raw
##<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
##>>> r.raw.read(10)
##'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
#保存文本,针对返回原始内容byte
##with open(filename, 'wb') as fd:
## for chunk in r.iter_content(chunk_size):
## fd.write(chunk)
#添加头部
##>>> import json
##>>> url = 'https://api.github.com/some/endpoint'
##>>> payload = {'some': 'data'}
##>>> headers = {'content-type': 'application/json'}
##
##>>> r = requests.post(url, data=json.dumps(payload), headers=headers)
#账号密码登陆
#r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
#发送表单数据
##paylaod={"key1":"value1","key2":"value2"}
##r=requests.post("http://httpbin.org/post",data=paylaod)
##print(r.text)
#发送string数据
##import json
##payload={"key1":"value1","key2":"value2"}
##r=requests.post("http://httpbin.org/post",data=json.dumps(payload))
##print(r.text)
#发送文件
##url='http://httpbin.org/post'
##files={'file':open('report.xls','rb')}
#显式设置文件名,文件类型,请求头:
##files={'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
#发送文件形式的字符串
##files={'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}
##r=requests.post(url,files=files)
##print(r.text)
#检测响应码
##r=requests.get('http://httpbin.org/get')
##print(r.status_code)
##print(r.status_code==requests.codes.ok)
##bad_r = requests.get('http://httpbin.org/status/404')
##print(bad_r.status_code)
##bad_r.raise_for_status()
#响应头
##r=requests.get('http://httpbin.org/get')
##print(r.headers)
##print(r.headers['date'])
#cookies
##url='http://example.com/some/cookie/setting/url'
##r=requests.get(url)
##print(r.cookies['example_cookie_name']) #报错
#发送cookies
##url = 'http://httpbin.org/cookies'
##cookies = dict(cookies_are='working')
##r = requests.get(url, cookies=cookies)
##print(r.text)
#重定向
##r=requests.get('http://github.com')
##print(r.url)
##print(r.history)
#超时处理
##requests.get('http://github.com',timeout=1)
#跨请求保存cookies
##s = requests.Session()
##s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
##r = s.get("http://httpbin.org/cookies")
##print(r.text)
#请求保存缺省数据
##s = requests.Session()
##s.auth = ('user', 'pass')
##s.headers.update({'x-test': 'true'})
### both 'x-test' and 'x-test2' are sent
##r=s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
##print(r.text)
#简单获取请求头部和返回头部
##url='http://www.baidu.com/'
##r=requests.get(url)
#返回头部
##print(r.headers)
#请求头部
##print(r.request.headers)
#设置SSL证书
#requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key'))