requests模块

python学习-requests模块

HTTP for Humans

requests 方法理解

基本Get请求

//ex_1.py

# -*- coding: utf-8 -*-
#requests.get()

import requests

key = {'wd':'python语言'}
# key = {'wd': 'python语言', 'pn': ''}
 
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()
r = requests.get("http://www.baidu.com/s?", params = key, headers = headers, timeout = 2)
# timeout 超时时间定为2秒

# 默认编码,requests 的默认编码一般为 ISO-8859-1
print(r.encoding)

# 更改默认编码
r.encoding = 'gbk'

# 查看响应内容,response.text 返回的是Unicode格式的数据
# print(r.text)
 
# 查看二进制响应内容,response.content 返回的字节流数据
# print(r.content)
# out : b'asdf..'
 
# 查看完整url地址
print(r.url)
 
# 查看响应头部字符编码
print(r.encoding)
 
# 查看响应码
print(r.status_code)
print(requests.codes.ok)
# 使用 r.raise_for_status() 或者检查 r.status_code 来判断是否请求成功

# 查看某个关键字内容
print(r.headers['Baidu_idcinfo'])


'''
utf-8
http://www.baidu.com/s?wd=python%E8%AF%AD%E8%A8%80
gbk
200
True
hnb
[Finished in 1.6s]
'''

response.text:

  1. 打印 str
  2. Requests 会基于 HTTP 响应的文本编码自动解码响应内容,大多数 Unicode 字符集都能被无缝地解码。自动解码,根据http头部对应的编码推测解码方式自动解码,可能出错(乱码)
  3. response.encoding = “utf-8”

response.content:

  1. 返回 bytes
  2. 返回的是服务器响应数据的原始二进制字节流,可以用来保存图片等二进制文件。
  3. response.content.deocde(“utf-8”)

获取网页源码:

  1. r.content.deocde()
  2. r.content.deocde(“GBK”)
  3. r.encoding = 'utf-8' ; r.text

基本Post请求

//ex_2.py

# -*- coding: utf-8 -*-
#requests.post()


import requests

# data 为字典
data = {
    "content1": "information1",
    "content2": "information2"
}

# data 为字符串
# data = "content1 = information1; content2 = information2"

# data 为文件对象
# data = open('data_info.txt', mode='r', encoding='utf-8')  
# 文件 data_info.txt 内容:content1 = information1; content2 = information2


url = "http://www.baidu.com"
 
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
 
r = requests.post(url, data = data, headers = headers)
 
# 网页源码
print(r.content.decode())
 
# 打印json文件信息
print(r.json())

proxy代理


import requests
     
# 根据协议类型,选择不同的代理
proxies = {
   "http": "http://8.8.8.8:8888",
   "https": "http://8.8.8.8:9999",
}
r = requests.get("http://www.baidu.com", proxies = proxies)
print(r.text)

Cookies 和 Sission

//ex_3.py

# -*- coding: utf-8 -*-
#cookie

import requests
 
url = "http://www.baidu.com/"
response = requests.get(url)
# 返回CookieJar对象:
cookiejar = response.cookies

# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
 
print(cookiejar)
print(cookiedict)

# cookie = dict(BDORZ = '27315')
# response = requests.get(url, cookies = cookie)

# print(response.cookies['BDORZ'])
# out: '27315'

'''
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}
[Finished in 1.1s]
'''

//ex_4.py

# -*- coding: utf-8 -*-
#session

import requests

# 创建session对象,可以保存Cookie值
session = requests.Session()
 
# 登陆任何页面,获取cookie
i1 = session.get(url="http://dig.chouti.com/help/service")
 
# 用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权
i2 = session.post(
    url="http://dig.chouti.com/login",
    data={
        'phone': "8615131255089",
        'password': "xxxxxx",
        'oneMonth': ""
    }
)

# 进而访问任何需要登录才能访问到的页面
i3 = session.get(url = "http://dig.chouti.com/link/vote?linksId=8589623")

print(i3.text)

发送文件


# 发送文件
file_dict = {
    'f1': open('readme', 'rb')
}
requests.request(method='POST',
                 url='http://127.0.0.1:8000/test/',
                 files=file_dict)
 
# 发送文件,定制文件名
file_dict = {
    'f1': ('test.txt', open('readme', 'rb'))
}
requests.request(method='POST',
                 url='http://127.0.0.1:8000/test/',
                 files=file_dict)
 
# 发送文件,定制文件名
file_dict = {
    'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf")
}
requests.request(method='POST',
                 url='http://127.0.0.1:8000/test/',
                 files=file_dict)
 
# 发送文件,定制文件名
file_dict = {
    'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf", 'application/text', {'k1': '0'})
}
requests.request(method='POST',
                 url='http://127.0.0.1:8000/test/',
                 files=file_dict)

重定向

r = requests.get("http://www.baidu.com", allow_redirects = True)
# allow_redirects 允许重定向

# 默认情况下,Requests 会自动处理所有重定向,可以使用响应对象的 history 方法来追踪重定向
print(r.history)
# r.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象,这个对象列表按照从最老到最近的请求进行排序

SSL证书验证

//ex_5.py

# -*- coding: utf-8 -*-
#ssl

import requests

# 跳过证书验证
response = requests.get("https://www.baidu.com/", verify = False)

# verify 默认开启
# 如果SSL证书验证不通过,或者不信任服务器的安全证书,则会报出SSLError

详细请看
https://www.cnblogs.com/wlx97e6/p/9950678.html
https://blog.csdn.net/weixin_44494778/article/details/93709582

posted @ 2021-02-10 10:43  Shivers0x72  阅读(61)  评论(0编辑  收藏  举报