request基本使用及各种请求方式参数的示例
作者:Jeff的技术栈 发布时间:2021-03-31 02:32:52
标签:request,请求方式,参数
各种请求方式
pip3 install requests
>>> import requests
>>> r = requests.get('https://www.cnblogs.com')
>>> r = requests.post('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.put('https://www.cnblogs.com', data = {'key':'value'})
>>> r = requests.delete('https://www.cnblogs.com')
>>> r = requests.head('https://www.cnblogs.com')
>>> r = requests.options('https://www.cnblogs.com')
request各种参数
参数 | 说明 |
---|---|
params | 字典或字节序列,作为参数增加到url中 |
data | 字典,字节序列或文件对象,作为request的内容 |
json | JSON格式的数据,作为request的内容 |
headers | 字典,HTTP定制头 |
cookies | 字典或CookieJar, request中的cookie |
auth | 元组,支持HTTp认证功能 |
files | 字典类型,传输文件 |
timeout | 设定超时时间,秒为单位 |
proxies | 字典类型,设定访问代理服务器,可以增加登录认证 |
allow_redirects | 重定向开关,默认为True |
stream | 获取内容立即下载开关,默认为True |
verify | 认证SSL证书开关,默认为True |
cert | 本地SSL证书路径 |
request基本使用
import requests
response = requests.get('https://www.cnblogs.com/kermitjam/')
print(response.text)
print(respone.text) # 响应体转成str
print(respone.content) # 响应体二进制(图片,视频)
print(respone.status_code) # 响应状态码
print(respone.headers) # 响应头
print(respone.cookies) # 服务端返回的cookie
print(respone.cookies.get_dict()) # 转成字典
print(respone.cookies.items())
print(respone.url) # 当次请求的地址
print(respone.history) # 如果有重定向,放到一个列表中.查看上一次请求从哪里来。(图片防盗链)
print(respone.encoding) # 编码方式
print(respone.iter_content()) # 视频,图片迭代取值
content-length # 查看下载前文件大小
response.iter_content() # 视频,图片迭代取值
with open("a.mp4",'wb') as f:
for line in response.iter_content():
f.write(line)
get请求携带参数
# 方式一:会转码,不推荐
response = requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3')
# 方式二:推荐
response = requests.get('https://www.baidu.com/',params={'name':'美女','age':18})
get请求携带headers头
respone = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
headers={
# 标志,什么东西发出的请求,浏览器信息,django框架,从哪取?(meta)
'User-Agent': 'request',
# 上一个页面的地址,图片防盗链
'Referer': 'xxx'
})
print(respone.status_code)
get请求携带cookie
带cookie,随机字符串(用户信息:也代表session),不管后台用的token认证,还是session认证
一旦登陆了,带着cookie发送请求,表示登陆了(下单,12306买票,评论)
# 第一种方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
headers={
'cookie': 'key3=value;key2=value',
})
# 第二种方式
ret = requests.get('http://127.0.0.1:8000/',params={'name':'美女','age':18},
cookies={"islogin":"xxx"})
print(ret.status_code)
post请求携带数据(注册、登录)
# data:urlencoded编码
ret = requests.post('http://127.0.0.1:8000/', data={'name': "jeff", 'age': 18})
# data:json编码
import json
data = json.dumps({'name': "jeff", 'age': 18})
ret = requests.post('http://127.0.0.1:8000/', json=data)
print(ret)
# 注意:编码格式是请求头中带的,所以可以手动修改,在headers中改
session对象
# session对象
session=requests.session()
# 跟requests.get/post用起来完全一样,但是它处理了cookie
# 假设是一个登陆,并且成功
res = session.post('http://127.0.0.1:8000/')
# # 再向该网站发请求,就是登陆状态,不需要手动携带cookie
res = session.get("http://127.0.0.1:8000/")
print(res)
乱码问题
# 加载回来的页面,打印出来,乱码(我们用的是utf8编码),如果网站用gbk,
ret = requests.get('http://127.0.0.1:8000/')
ret.encoding='gbk' # 修改编码
print(ret.apparent_encoding) # 当前页面的编码
# ret.encoding = ret.apparent_encoding
print(ret.encoding)
print(ret.apparent_encoding)
解析json数据
# 返回数据,有可能是json格式,有可能是html格式
ret=requests.get('http://127.0.0.1:8000/')
# print(type(ret.text))
# print(ret.text)
a=ret.json()
print(a['name'])
print(type(a))
使用代理
代理简单解释:
代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
#高匿:服务端,根本不知道我是谁
#普通:服务端是能够知道我的ip的
#http请求头中:X-Forwarded-For:代理的过程
爬虫使用正向代理好处:
1.突破频率限制。做个代理池,每次请求都是不同的Ip,服务器认为是不同的用户
2.不会封自己的ip。
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
ret = requests.get('https://www.pearvideo.com/', proxies={'http': '47.115.54.89'})
print(type(ret.text))
print(ret.text)
上传文件
# 爬虫用的比较少,后台写服务
file = {'myfile': open("1.txt", 'rb')}
ret = requests.post('http://127.0.0.1:8000/', files=file)
print(ret.content)
来源:https://www.cnblogs.com/guyouyin123/p/12663228.html


猜你喜欢
- 介绍在本文中,云朵君将和大家一起了解装饰器的工作原理,如何将我们之前定义的定时器类 Timer 扩展为装饰器,以及如何简化计时功能。最后对
- 一、MySQL Workbench的下载Workbench是MySql图形化的管理工具,可以在Workbench里输入MySql的语句,这可
- 知识补充表单简介(来自Mr._Dang)action:提交的地址method:提交的方式 get: 参数是在url中的,不安全,传输量比较少
- 运行net start mysql报服务名无效的解决办法,供大家参考,具体内容如下1. 症状以前电脑上安装了 MySQL,今天在电脑上运行,
- 我就废话不多说了,大家还是直接看代码吧~# 两个依赖包: sasl&thriftThe easier way I find to i
- 函数是一组可重用的代码,可以在程序的任何地方被调用。这消除了一次又一次地写入相同的代码的需要。这将帮助程序员编写模块化代码。您可
- 具体代码如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom sc
- 在存储过程中,请问如何判断所指定表的字段的类型?由于表和视图的每一列在SYSCOLUMNS表中都有详细资料,所以,我们只管从中取用来即可,很
- CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技
- [sql] -- ===================【创建存储过程】===================== USE [Message
- Smarty Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。 Heyes Template&nbs
- python 调用系统ffmpeg进行视频截图,并进行图片http发送ffmpeg ,视频、图片的各种处理。 最近在做视频、图片
- 程序的功能有了个大体的框架,其实可以自己添加一些功能,比如开始的数据库连接 ,可以先设置变量然后通过INIT() 来选择
- demo实现脚本下载安装工具需要python3,apktool.jar,apktool1.用apktool进行反编译cmd = 'a
- 基于之前的文章方法,加入批处理命令即可实现自动备份。只是由于批处理命令中对于备份文件的名字按照时间命名比较特别,所以特别整理一文。1、复制d
- Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的
- 项目结构:源代码:# -*- coding: utf-8 -*-"""@date: 2022/01
- 一 ,做好安装前的清理工作rpm -pa | grep mysql 或者 rpm -qa | grep -i mysqlyum remove
- 在WEB开发中.我们可能都习惯使用下面的代码来获取客户端的IP地址: C#代码 //优先取得 * string IP = Request
- 内容: ************* 1安装MYSQL后更改了ROOT的密码后用 net startmysql 启动时我就遇到了这样的问题.使