Python__模块(网络-HTTP简化版)__requests

简介

urllib模块的简化版

requests 是用 python 语言基于 urllib 编写,用于网络HTTP解析或操作

文档查询

https://requests.readthedocs.io/en/latest/

安装

pip install requests

了解

Request支持HTTP连接保持和连接池,

支持使用cookie保持会话,支持文件上传,

支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。

requets与urllib2区别

  • urllib 相对复杂

  • requests 简化操作


参数列表

响应公共方法
text

返回html的内容

以encoding解析返回的内容.

字符串方式的响应体,

根据响应头部的字符编码进行解码

content

返回2进制形式的内容

以字节形式(二进制)返回.

字节方式的响应体.

自动解码gzip和deflate压缩

encoding

当前网页编码

设置编码:encoding='utf-8'

decode解码

【例子】

decode("utf-8")

【常见类型】

utf-8 / gbk / gbk2312 / iso-8859 / ascii

apparent_encoding

自动判断编码

status_code

获取网页状态码

headers

存储服务器响应头

若键不存在则返回None,

获取html编码类型:

headers['content-type']

cookies返回cookie信息

raise_for_status()

抛出异常

失败请求(非200响应)抛出异常

json()

返回json

Requests中内置的JSON编码器,

非json解析出错会抛异常

close()关闭连接关闭与服务器的连接
next下一个请求返回重定向链中下一个请求的 PreparedRequest 对象
方法

get()

请求

【语法】

get(url,header,data,proxies(使用ip代理),...)

post()

发送

【语法】

post(url,header,data,proxies(使用ip代理),...)

head()获取响应报告获取头部信息
put()请求向URL位置存储一个资源,覆盖原URL位置的资源。
patch()请求局部更新URL位置的资源,即改变该处资源的部分内容。
delete()请求删除URL位置存储的资源
携带参数

data

设置请求体,用于post请求

paramsURL传递参数,用于get请求

json

为了方便请求而提供的参数,相当于data

headers

HTTP请求中的头部,它是一个字典

cookies

是所携带的 Cookie ,它可以是一个字典或者 CookieJar 的实例

files

是要上传的文件,它可以是一个字典,字典的内容是tuple

auth

用于开启HTTP请求的认证

timeout

超时时间

【语法】

timeout =(单位/秒)

allow_redirects

是否允许重定向,一个布尔值

proxies

使用ip代理

verify

是否检查服务端的证书,传布尔值或者CA的路径

stream

是布尔值,代表是否以流的方式读取结果

cert

传入客户端的SSL证书


参考代码

简单的请求

import requests

''' 地址 '''
u = 'https://www.xxx.com'

''' 携带请求头参数模拟浏览器请求 '''
h = {'user-agent':'xxx'}

''' 字段查询 '''
p = {'查询字段1': '值1', '查询字段2': '值2'}

response = requests.get(url=u,headers=h,params=p)
print(response.text)

网页状态码查看

import requests
url='site address'
response=requests.get(url)
response.status_code
# >>>>>> 200
response.headers['content-type']
# >>>>>> 'text/html;charset=utf-8'

获取 HTML 网页头信息

import requests
url = "site address"
res = requests.head(url)
# 打印请求头信息
print(res.headers)

IP代理使用

import requests
'''
    如果发送的是http请求,就使用http请求的代理,
    如果发送的是https请求,就使用一个https请求的代理
'''
proxies={
    http:'http://174.14.209.180:27829',
    https:'https://111.10.200.100:23456',
}
# 如果代理需要用户名和密码,则需要这样:
proxies = {
    'http': 'http://user:pass@10.10.1.10:3128/',
}
response = requests.get('https://www.xxx.com/', proxies=proxies)
print(response.text)

异常处理(请求超时)

import requests
from requests.exceptions import Timeout
try:
    response = requests.get(url, timeout=5)
    print('响应正常,执行下一步')
except Timeout as e:
    print("请求超时:", str(e))

异常处理(连接失败) 

import requests
from requests.exceptions import ConnectionError
try:
    response = requests.get(url)
    print('响应正常,执行下一步')
except ConnectionError as e:
    print("连接错误:", str(e))

异常处理(状态码) 

import requests
from requests.exceptions import HTTPError
try:
    response = requests.get(url)
    response.raise_for_status()
    print('响应正常,执行下一步')
except HTTPError as e:
    print("HTTP错误:", str(e))

异常处理(所有异常) 

import requests
from requests.exceptions import RequestException
try:
    response = requests.get(url)
    print('响应正常,执行下一步')
except RequestException as e:
    print("请求发生异常:", str(e))

文件上传

import requests
''' 上传文件,文件类型会自动处理 '''
url = 'http://127.0.0.1:8080/upload'
files = {
    'file': open('/home/rxf/test.jpg', 'rb')
}
'''
files = {
    'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))
}     
'''
r = requests.post(url, files=files)
print(r.text)

''' request更加方便的是,可以把字符串当作文件进行上传 '''
url = 'http://127.0.0.1:8080/upload'
files = {
    'file': ('test.txt', b'Hello Requests.')
}
r = requests.post(url, files=files)
print(r.text)

身份认证

import requests
from requests.auth import HTTPBasicAuth

''' 基本身份认证(HTTP Basic Auth) '''
r = requests.get(
    'https://httpbin.org/hidden-basic-auth/user/passwd', 
     auth=HTTPBasicAuth('user', 'passwd')
     # auth=('user', 'passwd') # 可忽略
) 
'''
print(r.json())

''' 
简单身份认证
    另一种非常流行的HTTP身份认证形式是摘要式身份认证,
    Requests对它的支持也是开箱即可用的
'''
requests.get(URL, auth=HTTPDigestAuth('user', 'pass')

Cookie认证

import requests
''' 1、首先登陆任何页面,获取cookie '''
i1 = requests.get(url='http://xxx.com/help/service')
i1_cookies = i1.cookies.get_dict()
''' 2、用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权 '''
i2 = requests.post(
    url='http://xxx.com/login',
    data={
        'phone': '8615131255089',
        'password': 'xxooxxoo',
        'oneMonth': ''
    },
    cookies=i1_cookies
)
''' 3、点赞(只需要携带已经被授权的gpsd即可) '''
gpsd = i1_cookies['gpsd']
i3 = requests.post(
    url='http://xxx.com/link/vote?linksId=8589523',
    cookies={'gpsd': gpsd}
)
print(i3.text)

Session认证

import requests
session = requests.Session()
i1 = session.get(url='http://xxx.com/help/service')
i2 = session.post(
    url='http://xxx.com/login',
    data={
        'phone': '8615131255089',
        'password': 'xxooxxoo',
        'oneMonth': ''
    }
)
i3 = session.post(
    url='http://xxx.com/link/vote?linksId=8589523'
)
print(i3.text)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值