0717-7821348
关于我们
热点新闻NEWS

彩乐乐网双色球走势图-彩乐乐十一选五遗漏-彩乐乐网杀号定胆

您现在的位置: 首页 > 关于我们

python3 request 库

request库

虽然Python的规范库中 urllib.request 模块现已包括了往常咱们运用的大多数功用,可是它的 API 运用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,阐明运用更简练便利。

Requests 仅有的一个非转基因的 Python HTTP 库,人类能够安全享受。

Requests 承继了urllib2的一切特性。Requests支撑HTTP衔接坚持和衔接池,支撑运用cookie坚持会话,支撑文件上传,支撑主动确认呼应内容的编码,支撑国际化的 URL 和 POST 数据主动编码。

requests 的底层完结其实便是 urllib3。

Requests的文档十分齐备,中文文档也适当不错。Requests能彻底满意当时网络的需求,支撑Python 2.6—3.6,而且能在PyPy下完美运转。

1.1 requests库特性。

Requests库是Python中的一个HTTP恳求第三方库,用来简化网络恳求,

它有如下特征,能够彻底满意现在的Web开发。

1.Keep-Alive & 衔接池。

2.国际化域名和 URL。

3.带耐久 Cookie 的会话。

4.浏览器式的 SSL 认证。

5.主动内容解码。

6.根本/摘要式的身份认证。

7.高雅的 key/value Cookie。

8.主动解压。

9.Unicode 呼应体。

10.HTTP(S) 署理支撑。

11.文件分块上传。

12.流下载。

13.衔接超时。

14.分块恳求。

15.支撑 .netrc。

1.2 requests库装置。

requests库的装置能够经过pip install requests指令装置或许运用easy_install都能够完结装置,一般状况都是经过pip install requests指令装置。

1.3 用requests库发送恳求。

运用 Requests发送网络恳求十分简略。

第一步:需求导入 Requests 模块:

import requests

第二步:创立一个Response目标,咱们能够各种经过HTTP恳求类型从这个目标中获取一切咱们想要的信息。

例如:获取 Github 的公共时刻线。

Response = requests.get('https://api.github.com/events')

Response = requests.post('http://httpbin.org/post', data = {'key':'value'})

Response = requests.put('http://httpbin.org/put', data = {'key':'value'})

Response = requests.delete('http://httpbin.org/delete')

Response = requests.head('http://httpbin.org/get')

Response = requests.options('http://httpbin.org/get')

Get 、Post、PUT、DELETE、HEAD 以及 OPTIONS 都是requests 库的HTTP恳求类型,常用的一般是Get 、Post两种,下面的教程也是以Get 、Post两种为主介绍相关的运用。

1.4 带参数的Get恳求。

一般一个get完好的URL是手艺构建的,数据会以键/值对的办法置于URL中,跟在一个问号的后边。例如, httpbin.org/get?key=val。 Requests 答应你运用 params 关键字参数,以一个字符串字典来供给这些参数。举例来说,假设你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你能够运用如下代码:

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.get("http://httpbin.org/get", params=payload)

print(r.url)

运转成果:

http://httpbin.org/get?key1=value1&key2=value2

留意字典里值为 None 的键都不会被增加到 URL 的查询字符串里。

比方:

import requests

payload = {'key1': 'value1', 'key2': None,'key3':'value3'}

r = requests.get("http://httpbin.org/get", params=payload)

print(r.url)

运转成果:

http://httpbin.org/get?key3=value3&key1=value1

你还能够将一个列表作为值传入。

比方:

import requests

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

r = requests.get("http://httpbin.org/get", params=payload)

print(r.url)

运转成果:

http://httpbin.org/get?key2=value2&key2=value3&key1=value1

1.5 Get恳求带headers 和 params查询参数。

Get恳求假设想增加 headers,能够传入headers参数来增加恳求头中的headers信息。假设要将参数放在url中传递,能够运用 params 参数。

比方:

import requests

kw = {'wd':'电影'}

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# params 接纳一个字典或许字符串的查询参数,字典类型主动转换为url编码,不需求urlencode()

response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)

# 查看呼应内容,response.text 回来的是Unicode格局的数据。

print(response.text)

# 查看呼应内容,response.content回来的字节省数据。

print(response.content)

# 查看完好url地址。

print(response.url)

# 查看呼应头部字符编码。

print(response.encoding)

# 查看呼应码。

print(response.status_code)

运转成果:

阐明:

【response.text】:获取呼应内容。

【response.content】:也是获取呼应内容,可是回来的是字节省数据。

【response.url】:查看完好的恳求URL。

【response.encoding】:查看呼应头部字符编码。

【response.status_code】:查看呼应状况码。

运用response.text 时,Requests 会依据 HTTP 呼应的文本编码主动解码呼应内容,大多数 Unicode 字符集都能被无缝地解码。

运用response.content 时,回来的是服务器呼应数据的原始二进制字节省,能够用来保存图片等二进制文件。

1.6 Post恳求。

关于 POST 恳求来说,咱们一般需求为它增加一些参数。那么最根本的传参办法能够运用 data 这个参数。

比方:

import requests

payload = {'key1': 'value1', 'key2': 'value2'}

ret = req彩乐乐网双色球走势图-python3 request 库uests.post("http://httpbin.org/post", data=payload)

print(ret.text)

运转成果:

{"args":{},"data":"","files":{},"form":{"key1":"value1","key2":"value2"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"23","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"119.123.205.115","url":"http://httpbin.org/post"}

1.7 呼应内容。

requests模块的回来目标是一个Response目标,能够从这个目标中获取需求的信息。下面 r 代表Response目标。

【r.text】:文本呼应内容。

【r.context】:二进制呼应内容。

【r.json()】:JSON呼应内容 。

【r.raw】:原始相应内容。

(1)文本呼应内容。

比方:

import requests

r = requests.get('https://api.github.com/events')

print(r.text)

运转成果:

关于非文本恳求,你也能以字节的办法拜访恳求呼应体。

(2)二进制呼应内容。

关于非文本恳求,你也能以字节的办法拜访恳求呼应体。

比方1:

import requests

r = requests.get('https://api.github.com/events')

print(r.content)

运转成果:

Requests 会主动为你解码 gzip 和 deflate 传输编码的呼应数据。

比方2,以恳求回来的二进制数据创立一张图片。

from PIL import Image

from io import BytesIO

i = Image.open(BytesIO(r.content))

(3)JSON呼应内容。

Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据。

比方:

import requests

r = requests.get('https://github.com/timeline.json')

print(r.json())

运转成果:

假设 JSON 解码失利, r.json 就会抛出一个反常。例如,相应内容是 401 (Unauthorized),测验拜访 r.json 将会抛出 ValueError: No JSON object could be decoded 反常。

(4)Raw呼应内容。

在稀有的状况下,你或许想获取来自服务器的原始套接字呼应,那么你能够拜访 r.raw。 假设你的确想这么干,那请你保证在初始恳求中设置了 stream=True。详细你能够这么做。

比方:

import requests

r = requests.get('https://github.com/timeline.json', stream=True)

print(r.raw)

运转成果:

但一般状况下,你应该以下面的办法将文本流保存到文件。

with open(filename, 'wb') as fd:

for chunk in r.iter_content(chunk_size):

fd.write(chunk)

运用 Response.iter_content 将会处理很多你直接运用 Response.raw 不得不处理的。 当流下载时,上面是优先引荐的获取内容办法。

1.8 呼应码转码。

Requests会主动将从Server回来的内容解码。许多Unicode字符也会被解码。

恳求宣布后,Requests 会依据 HTTP 头部对呼应的编码作出有依据的估测。当你拜访 r.text 之时,Requests 会运用其估测的文本编码。你能够找出 Requests 运用了什么编码,而且能够运用r.encoding 特点来改动它:

假设你改动了编码,每逢你拜访 r.text ,Request 都将会运用 r.encoding 的新值。你或许期望在运用特别逻辑计算出文本的编码的状况下来修正编码。比方 HTTP 和 XML 本身能够指定编码。这样的话,你应该运用 r.content 来找到编码,然后设置 r.encoding 为相应的编码。这样就能运用正确的编码解析 r.text 了。

在你需求的状况下,Re彩乐乐网双色球走势图-python3 request 库quests 也能够运用定制的编码。假设你创立了自己的编码,并运用codecs 模块进行注册,你就能够轻松地运用这个解码器称号作为 r.encoding 的值, 然后由 Requests 来为你处理编码。

比方:

import requests

r = requests.get('https://api.github.com/events')

print(r.text)

print(r.encoding)

r.encoding = 'ISO-8859-1'

print(r.encoding)

运转成果:

1.9 自界说恳求头。

假设你想为恳求增加 HTTP 头部,只需简略地传递一个 dict 给 headers 参数就能够了。

例如,在前一个示例中咱们没有指定 content-type。

import requests

url = 'https://api.github.com/some/endpoint'

headers = {'user-agent': 'my-app/0.0.1'}

r = requests.get(url, headers=headers)

留意: 定制 header 的优先级低于某些特定的信息源,例如:

1.假设在 .netrc 中设置了用户认证信息,运用 headers= 设置的授权就不会收效。而假设设置了auth= 参数,.netrc 的设置就无效了。

2.假设被重定向到其他主机,授权 header 就会被删去。

3.署理授权 header 会被 URL 中供给的署理身份覆盖掉。

4.在咱们能判别内容长度的状况下,header 的 Content-Length 会被改写。

更进一步讲,Requests 不会依据定制 header 的详细状况改动自己的行为。只不过在最终的恳求中,一切的 header 信息都会被传递进去。

留意: 一切的 header 值有必要是 string、bytestring 或许 unicode。虽然传递 unicode header 也是答应的,但不主张这样做。

1.10 呼应状况码。

咱们能够经过r.status_cod彩乐乐网双色球走势图-python3 request 库e检测呼应状况码。

比方:

import requests

r = requests.get('http://httpbin.org/get')

print(r.status_code)

运转成果:

为便利引证,Requests还顺便了一个内置的状况码查询目标。

r.status_code == requests.codes.ok

假设发送了一个过错恳求(一个 4XX 客户端过错,或许 5XX 服务器过错呼应),咱们能够经过Response.raise_for_status() 来抛出反常。

import requests

r = requests.get('http://httpbin.org/get')

print(r.status_code)

假设运转的成果为:404,会报如下过错:

bad_r.raise_for_status()

Traceback (most recent call last):

File "requests/models.py", line 832, in raise_for_status

raise http_error

requests.exceptions.HTTPError: 404 Client Error

可是,因为咱们的比方中 r 的 status_code 是 200 ,当咱们调用 raise_for_status() 时,得到的是:None。

1.11 呼应头。

咱们能够经过r.headers查看以一个恳求的服务器呼应头。

比方:

import requests

r = requests.get('http://httpbin.org/get')

print(r.headers)

运转成果:

{'Server': 'gunicorn/19.8.1',

'Access-Control-Allow-Origin': '*',

'Content-Length': '211',

'Content-Type': 'application/json',

'Connection': 'keep-alive',

'Access-Control-Allow-Credentials': 'true',

'Date': 'Sun, 17 Jun 2018 03:21:54 GMT',

'Via': '1.1 vegur'}

回来的是一个字典,这个字典比较特别:它是仅为 HTTP 头部而生的,HTTP 头部是大小写不灵敏的,因而,咱们能够运用恣意大写办法来编写这些呼应头字段。

还有一个特别点,那便是服务器能够屡次承受同一 header,每次都运用不同的值。 Requests 会主动将它们兼并。

1.12 cookies

咱们能够经过r.cookies 去获取一个恳求的cookies,特别是在实战中登录模块用的比较多,咱们能够经过cookies进行登录。

比方1:

import requests

response = requests.get("http://www.baidu.com/")

# 回来CookieJar目标:

cookiejar = response.cookies

# 将CookieJar转为字典:

cookiedict = requests.utils.dict_from_cookiejar(cookiejar)

print(cookiejar)

print(cookiedict)

运转成果:

比方2:运用Cookie模仿登录过程:

1.在浏览器输入http://demo.bxcker.com,输入用户名和暗码登录。

2.登录成功点“客户办理”模块。

3.进入客户办理模块,显现客户列表。

4.经过抓包东西抓取客户列表,得到登录后的Cookie信息。

GET http://demo.bxcker.com/customer/index.shtml HTTP/1.1

Host: demo.bxcker.com

Connection: keep-alive

Pragma: no-cache

Cache-Control: no-cache

Accept: */*

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

Referer: http://demo.bxcker.com/

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie: IEX-JSESSIONID=WFPlPUVbbbkQ76XPCr9tXRB4voK0eESo; Hm_lvt_4320d635415dcfd7831a11fa64aec173=1526347940; Hm_lpvt_4320d635415dcfd7831a11fa64aec173=1526347940; SPRING_SECURITY_REMEMBER_ME_COOKIE=UE9kSDFGMnVsS291S2Z2V1k5c1daQT09OjZxWFVDUUhoVmR2UTdsWnRFRnlZZ0E9PQ

5.运用sublime text东西处理抓到的http恳求头信息替换成字典。

挑选内容替换的办法是用正则表达式。

内容填写:^(.*):\s(.*)$ (需求把header文件内容处理成字典,中心有个空格,所以加个\s)

替换为填写:"\1":"\2",

点全换,处理完结之后变成如下:

"Host":"demo.bxcker.com",

"Connection":"keep-alive",

"Pragma":"no-cache",

"Cache-Control":"no-cache",

"Accept":"*/*",

"X-Requested-With":"XMLHttpRequest",

"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",

"Referer":"http://demo.bxcker.com/",

"Accept-Encoding":"gzip, deflate",

"Accept-Language":"zh-CN,zh;q=0.9",

"Cookie":"IEX-JSESSIONID=WFPlPUVbbbkQ76XPCr9tXRB4voK0eESo; Hm_lvt_4320d635415dcfd7831a11fa64aec173=1526347940; Hm_lpvt_4320d635415dcfd7831a11fa64aec173=1526347940; SPRING_SECURITY_REMEMBER_ME_COOKIE=UE9kSDFGMnVsS291S2Z2V1k5c1daQT09OjZxWFVDUUhoVmR2UTdsWnRFRnlZZ0E9PQ",

6. 处理完结之后直接拷贝到Python界说的头信息变量headers={}里。

7. 收拾headers 信息(去掉一些没用的,保存一些重要的)。

"Con彩乐乐网双色球走势图-python3 request 库nection":"keep-alive",

"X-Requested-With":"XMLHttpRequest",

"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",

"Referer":"http://demo.bxcker.com/",

"Cookie":"IEX-JSESSIONID=WFPlPUVbbbkQ76XPCr9tXRB4voK0eESo; Hm_lvt_4320d635415dcfd7831a11fa64aec173=1526347940; Hm_lpvt_4320d635415dcfd7831a11fa64aec173=1526347940; SPRING_SECURITY_REMEMBER_ME_COOKIE=UE9kSDFGMnVsS291S2Z2V1k5c1daQT09OjZxWFVDUUhoVmR2UTdsWnRFRnlZZ0E9PQ",

8. 编写完好的程序。

import requests

from urllib import parse

url ="http://demo.bxcker.com/qhiex_login"

headers ={

"Referer": "http://demo.bxcker.com/",

"Connection": "keep-alive",

"X-Requested-With": "XMLHttpRequest",

"User-Agent": "M宁波镇海天气ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",

"Content-Type": "application/x-www-form-urlencoded",

"Accept-Language": "zh-CN,zh;q=0.9",

}

data ={"username":"demo100","password":"demo100"}

# 经过urlencode()转码

postdata = parse.urlencode(data).encode(encoding='UTF8')

response = requests.post彩乐乐网双色球走势图-python3 request 库(url, data = postdata,headers=headers)

# 回来CookieJar目标:

cookiejar = response.cookies

# 将CookieJar转为字典:

cookiedict = requests.utils.dict_from_cookiejar(cookiejar)

print(cookiejar)

print(cookiedict)

#运用cookie登录,拜访客户办理模块

r=requests.get("http://demo.bxcker.com/customer/index.shtml",headers=headers)

# 呼应内容转码

r.encoding = 'utf-8'

#打印呼应内容

print(r.text)

运转成果:

能够看到客户列表里的相关信息,证明是经过Cookie登录成功,然后跳转到客户办理模块,获取的客户信息。

1.13 Sission

在 requests 里,session目标是一个十分常用的目标,这个目标代表一次用户会话:从客户端浏览器衔接服务器开端,到客户端浏览器与服务器断开。

会话能让咱们在跨恳求时分坚持某些参数,比方在同一个 Session 实例宣布的一切恳求之间坚持 cookie 。

比方:运用Sission完结登录。

import requests

from urllib import parse

url ="http://demo.bxcker.com/qhiex_login"

headers ={

"Referer": "http://demo.bxcker.com/",

"Connection": "keep-alive",

"X-Requested-With": "XML彩乐乐网双色球走势图-python3 request 库HttpRequest",

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",

"Content-Type": "application/x-www-form-urlencoded",

"Accept-Language": "zh-CN,zh;q=0.9",

}

data ={"username":"demo100","password":"demo100"}

# 创立session目标,能够保存Cookie值。

ssion = requests.session()

# 发送顺便用户名和暗码的恳求,并获取登录后的Cookie值,保存在ssion里。

ssion.post("http://www.renren.com/PLogin.do", data = data)

# ssion包括用户登录后的Cookie值,能够直接拜访那些登录后才能够拜访的页面。

r = ssion.get("http://demo.bxcker.com/customer/index.shtml",headers=headers)

# 呼应内容转码。

r.encoding = 'utf-8'

# 打印呼应内容。

print(r.text)

运转成果:

1.14 重定向和重定向前史。

默许状况下,除了 HEAD, Requests 会主动处理一切重定向。

能够运用呼应目标的 history 办法来追寻重定向。

Response.history 是一个 Response 目标的列表,为了完结恳求而创立了这些目标。这个目标列表依照从最老到最近的恳求进行排序。

例如:Github 将一切的 HTTP 恳求重定向到 HTTPS。

import requests

r = requests.get('http://github.com')

print(r.url)

#'https://github.com/'

print(r.status_code)

# 200

print(r.history)

#[]

假设你运用的是GET、OPTIONS、POST、PUT、PATCH 或许 DELETE,那么你能够经过 allow_redirects 参数禁用重定向处理:

import requests

r = requests.get('http://github.com',allow_redirects=False)

print(r.status_code)

# 301

print(r.history)

#[]

假设你运用了 HEAD,你也能够启用重定向:

比方:

import requests

r = requests.get('http://github.com',allow_redirects=False)

print(r.url)

#'https://github.com/'

print(r.history)

#[]

1.15 恳求超时设置。

你能够告知 requests 在经过以 timeout 参数设定的秒数时刻之后中止等候呼应。

requests.get('http://github.com', timeout=0.001)

1.16 署理(proxies参数)

假设需求运用署理,你能够经过为恣意恳求办法供给 proxies 参数来装备单个恳求。

比方:

import requests

# 依据协议类型,挑选不同的署理

proxies = {

"http": "http://12.34.56.79:9527",

"https": "http://12.34.56.79:9527",

}

response = requests.get("http://www.baidu.com", proxies = proxies)

print response.text

也能够经过本地环境变量 HTTP_PROXY 和 HTTPS_PROXY 来装备署理:

export HTTP_PROXY="http://12.34.56.79:9527"

export HTTPS_PROXY="https://12.34.56.79:9527"

1.17 私密署理验证(特定格局) 和 Web客户端验证(auth 参数)。

urllib.request库 的做法比较复杂,requests只需求一步。

1.私密署理。

比方:

import requests

# 假设署理需求运用HTTP Basic Auth,能够运用下面这种格局:

proxy = { "http": "xny_123:abc123@61.158.163.130:16816" }

response = requests.get("http://www.baidu.com", proxies = proxy)

print(response.text)

2.web客户端验证。

假设是Web客户端验证,需求增加 auth = (账户名, 暗码)。

比方:

import requests

auth=('xiaony', 'xny123')

response = requests.get('http://192.168.1.102', auth = auth)

print(response.text)

1.18 处理HTTPS恳求 SSL证书验证。

Requests也能够为HTTPS恳求验证SSL证书。

要想查看某个主机的SSL证书,你能够运用 verify 参数(也能够不写)。

比方:

import requests

r = requests.get("https://www.baidu.com/", verify=True)

# 也能够省掉不写

# r = requests.get("https://www.baidu.com/")

print(r.encoding)

# 呼应转码

r.encoding = 'utf-8'

print(r.text)

运转成果: