python之常用模块三requests

requests简介

requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多
因为是第三方库,所以使用前需要cmd安装
pip install requests
安装完成后import一下,正常则说明可以开始使用了。
详情见官方文档http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

1.简单用法

 #导入requests模块
 import requests,pprint,json
 # requests.get()用于请求目标网站,尝试获取某个网页
 r = requests.get('https://api.github.com/')
 print(r.status_code)    #响应状态码 200
 print(r.content)  # 二进制的内容
 print(r.text)     #字符串
 print(r.json())   #dict  == print(json.loads(r.text)),JSON对象必须是STR、字节或BytErar
 print(r.url)      #获取url  https://api.github.com/

2.请求头headers

# 请求头:就是客户端在访问url的时候也就是请求服务器时,会把一些request headers请求头信息发送给服务器,服务器就可以接收。
'''
作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,
你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,
服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent
请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
'''
user_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' \
            '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
header = {'User-Agent':user_Agent}
r = requests.get('https://www.douban.com/',headers= header)
print(r.text)

3.响应headers

# 服务器收到了客户端提出的要求,现在要把数据返回给客户端,还有一些response Headers信息给客服端,所以客户端也能获取到这些信息。
user_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' \
            '(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
header = {'User-Agent':user_Agent}
r = requests.get('https://www.douban.com/',headers= header)
pprint.pprint(r.headers)    #获取响应头

4.url参数以及请求方式

#以微信公众号开发为例:
appID='wx4880f9bc5144a729'
APPsecret='61dac4640b7d16ff19e9cab1ca8c108b'

url = f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appID}&secret={APPsecret}'
result = requests.get(url).json()
print(result)    #微信会返回下述JSON数据包给公众号
access_token = result.get('access_token')

#另一种方式,与上面效果相同
params = {'grant_type':'client_credential','appid':appID,'secret':APPsecret}
url = 'https://api.weixin.qq.com/cgi-bin/token?'
result = requests.get(url,params=params)    #获取到access_token
print(result.url)
result = result.json()
print(result)    #微信会返回下述JSON数据包给公众号
access_token = result.get('access_token')

#得到我们的access_token,用post去请求
#这里要注意第一次有可能发送失败会报错,需要我们自己先给公众号发送一条信息
#我这里第一次默认发送的是Hello World,所以不会报错,因为hello world 是开发者的共同语言,如过不是可能会有上述问题
url = f'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={access_token}'

req_json = {
    "touser":"olrK61Ro4DDxdDeU7f47qnmPsL9U",  #发给那个用户   这里我们要扫码关注自己的公众号
    "msgtype":"text",   #类型
    "text":
    {
         "content":"Hello World,你好帅"    #发送内容
    }
}
req_date = json.dumps(req_json,ensure_ascii=False)   #阻止把我们字符串转换为Unicode  \u4e2d\u56fd  防止转换,默认True
json.dumps() #方法返回一个str,内容就是标准的JSON
rsp = requests.post(url,data=req_date.encode('utf-8'))
# 传递的时候只能传递01010
# 如果data是字符串requests会进行encode的操作,而他使用的编码类型不受控制
# 所以我们可以自己制定编码类型,把字符串转换成二进制数据
print(rsp.json())

5.要判断响应的状态码是否异常(非2…非3…)

url1 = 'http://localhost:8080/500'
rsp = requests.get(url1)
rsp.raise_for_status()   #会抛出 HTTPError的异常,因为响应状态码是500
print(rsp.status_code)  #500
print(rsp.json())
'''
状态码解释,有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--信息不完整需要进一步补充
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
详情见:https://blog.csdn.net/GarfieldEr007/article/details/77984065
'''

6.cookie的处理

#为什么要有Cookie? 因为HTTP协议是无状态的
概念:
简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。
当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,
都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,
就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。

重要:
服务器 响应的headers包含set_cookie, 浏览器根据set_cookie的值存储浏览器缓存中
下一次浏览器再访问的时候,会读取存储的cookie信息,把他放到Cookie的请求头里面
对应服务器就知道你谁谁了

url = 'http://localhost:8080/set/cookie'
r = requests.get(url)
#查看响应设置的cookie
for k,v in r.cookies.items():
    print(k,v)

# # 由于http协议是无状态的,这里打印的结果是:没有得到之前设置的cookie
url = 'http://localhost:8080/has/cookie'
r = requests.get(url)
print(r.text)    #响应的headers包含set_cookie  这里我们没有加

#针对上述问题,就延伸出会话保持session
session = requests.Session()   #存储Cookie
r = session.get('http://localhost:8080/set/cookie')
print(r.text)   #设置cookie
for k,v in r.cookies.items():
    print(k,v)   #username gavin

url = 'http://localhost:8080/has/cookie'  #重新请求,得到了之前设置的cookie: gavin,上述打印的是没有得到之前设置的cookie
r = session.get(url)
print(r.text)

7.重定向

# 301是永久重定向,而302是临时重定向
# 浏览器访问http://www.baidu.com/ 地址百度服务器 发现你使用的http,不安全
# 百度告诉 Status Code: 307    Location: https://www.baidu.com/
# Location(重定向到那个网址):应该重定向到 https://www.baidu.com/ 这个地址
# 于是浏览器访问了 https://www.baidu.com/

r = requests.get("http://github.com",allow_redirects = True)  #allow_redirects:允许重定向
print(r.url,r.status_code,r.history[0].url)  #https://github.com/ 200 [<Response [301]>]
# history:历史访问记录
#重定向到:https://github.com/ 200 历史纪录:http://github.com/
#打印历史纪录
for h in r.history:
    print(h.url)

8.timeout 超时的关键字参数

 如果你请求服务器,服务器的处理超过你的timeout的参数 那么则会抛出requests.exceptions.ConnectTimeout的异常
	from requests.exceptions import ReadTimeout
	try:
	    r = requests.get("http://localhost:8080/", timeout=8)
	except ReadTimeout as err:
	    print(str(err))
	else:
	    print(r.text)

9.代理的设置,通过proxies参数

proxies = {
    'http':'http://58.53.128.83:3128',
    'https':'https://219.234.5.128:3128'
}

url = 'https://www.baidu.com'
r = requests.get(url,proxies=proxies)
print(r.url)
print(r.text)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值