python request 模块详细介绍


Posted in Python onNovember 10, 2020

request

Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。

GET 请求

# 1、无参数实例
   
import requests
   
ret = requests.get('https://github.com/timeline.json')
   
print ret.url
print ret.text
   
   
   
# 2、有参数实例
   
import requests
   
payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.get("http://httpbin.org/get", params=payload)
print ret.url
print ret.text

POST 请求

# 1、基本POST实例
   
import requests
   
payload = {'key1': 'value1', 'key2': 'value2'}
ret = requests.post("http://httpbin.org/post", data=payload)
   
print ret.text
   
   
# 2、发送请求头和数据实例
   
import requests
import json
   
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
   
ret = requests.post(url, data=json.dumps(payload), headers=headers)
print ret.text
print ret.cookies 

其他请求

requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.head(url, **kwargs)
requests.delete(url, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.options(url, **kwargs)
   
# 以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)

requests.request() 参数

method:提交方式  get/post 。

url:提交地址。

params:在URL上传递的参数,GET形式传递到后台,例如向http://www.oldboyyede.com上传数据。

requests.request(
 
   method = 'GET',
 
url = 'http://www.oldboyyede.com',
 

params = { 'k1' : 'v1' , 'k2' : 'v2' }
 
)
 
#   http://www.oldboyyede.com?k1=v1&k2=v2

data:在请求体里面传递的数据,后面可以是字典,字节等数据类型。

requests.request(
 
method = 'POST',
 

url = 'http://www.oldboyyede.com',
 

# data= { 'k1' : 'v1' , 'k2' : 'v2' , 'x':[1,2,3]}
 

data=" user=wjw&pwd=123123 "
 
)

json:在请求体里面传递数据,把整体序列化成一个大字符串,字典中嵌套字典的话用JSON 。

requests.request(
 
method = 'POST',
 

url = 'http://www.oldboyyede.com',
 

json= { 'k1' : 'v1' , 'k2' : 'v2' }
 
)
 
# "{ 'k1' : 'v1' , 'k2' : 'v2' }"

headers:请求头。

一定要添加浏览器,不然可能会遇到网络防火墙

python request 模块详细介绍

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}

# 一定要添加浏览器,不然可能会遇到网络防火墙拦截你的请求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}
 
r1 = requests.get(
    url='http://dig.chouti.com/',
    headers=headers
)

files:上传文件对象。

# 模块的详细使用
import requests
 
requests.post(
    url='xxxxxx',
    files={
        # 'f1':open('s1.py','rb')
        # 可以上传元祖的形式上传,sssss1.py为后台获取的名称
        'f1': open('sssss1.py',('s1.py', 'rb'))
    }
)

参数实例

def param_method_url():
    # requests.request(method='get', url='http://127.0.0.1:8000/test/')
    # requests.request(method='post', url='http://127.0.0.1:8000/test/')
    pass
 
 
def param_param():
    # - 可以是字典
    # - 可以是字符串
    # - 可以是字节(ascii编码以内)
 
    # requests.request(method='get',
    # url='http://127.0.0.1:8000/test/',
    # params={'k1': 'v1', 'k2': '水电费'})
 
    # requests.request(method='get',
    # url='http://127.0.0.1:8000/test/',
    # params="k1=v1&k2=水电费&k3=v3&k3=vv3")
 
    # requests.request(method='get',
    # url='http://127.0.0.1:8000/test/',
    # params=bytes("k1=v1&k2=k2&k3=v3&k3=vv3", encoding='utf8'))
 
    # 错误
    # requests.request(method='get',
    # url='http://127.0.0.1:8000/test/',
    # params=bytes("k1=v1&k2=水电费&k3=v3&k3=vv3", encoding='utf8'))
    pass
 
 
def param_data():
    # 可以是字典
    # 可以是字符串
    # 可以是字节
    # 可以是文件对象
 
    # requests.request(method='POST',
    # url='http://127.0.0.1:8000/test/',
    # data={'k1': 'v1', 'k2': '水电费'})
 
    # requests.request(method='POST',
    # url='http://127.0.0.1:8000/test/',
    # data="k1=v1; k2=v2; k3=v3; k3=v4"
    # )
 
    # requests.request(method='POST',
    # url='http://127.0.0.1:8000/test/',
    # data="k1=v1;k2=v2;k3=v3;k3=v4",
    # headers={'Content-Type': 'application/x-www-form-urlencoded'}
    # )
 
    # requests.request(method='POST',
    # url='http://127.0.0.1:8000/test/',
    # data=open('data_file.py', mode='r', encoding='utf-8'), # 文件内容是:k1=v1;k2=v2;k3=v3;k3=v4
    # headers={'Content-Type': 'application/x-www-form-urlencoded'}
    # )
    pass
 
 
def param_json():
    # 将json中对应的数据进行序列化成一个字符串,json.dumps(...)
    # 然后发送到服务器端的body中,并且Content-Type是 {'Content-Type': 'application/json'}
    requests.request(method='POST',
                     url='http://127.0.0.1:8000/test/',
                     json={'k1': 'v1', 'k2': '水电费'})
 
 
def param_headers():
    # 发送请求头到服务器端
    requests.request(method='POST',
                     url='http://127.0.0.1:8000/test/',
                     json={'k1': 'v1', 'k2': '水电费'},
                     headers={'Content-Type': 'application/x-www-form-urlencoded'}
                     )
 
 
def param_cookies():
    # 发送Cookie到服务器端
    requests.request(method='POST',
                     url='http://127.0.0.1:8000/test/',
                     data={'k1': 'v1', 'k2': 'v2'},
                     cookies={'cook1': 'value1'},
                     )
    # 也可以使用CookieJar(字典形式就是在此基础上封装)
    from http.cookiejar import CookieJar
    from http.cookiejar import Cookie
 
    obj = CookieJar()
    obj.set_cookie(Cookie(version=0, name='c1', value='v1', port=None, domain='', path='/', secure=False, expires=None,
                          discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False,
                          port_specified=False, domain_specified=False, domain_initial_dot=False, path_specified=False)
                   )
    requests.request(method='POST',
                     url='http://127.0.0.1:8000/test/',
                     data={'k1': 'v1', 'k2': 'v2'},
                     cookies=obj)
 
 
def param_files():
    # 发送文件
    # 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)
 
    pass
<br>
# 做基本认证 header中加密的用户名和密码
def param_auth():
    from requests.auth import HTTPBasicAuth, HTTPDigestAuth
 
    ret = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('wangjiawei', 'sdfasdfasdf'))
    print(ret.text)
 
    # ret = requests.get('http://192.168.1.1',
    # auth=HTTPBasicAuth('admin', 'admin'))
    # ret.encoding = 'gbk'
    # print(ret.text)
 
    # ret = requests.get('http://httpbin.org/digest-auth/auth/user/pass', auth=HTTPDigestAuth('user', 'pass'))
    # print(ret)
    #
 
# 请求和响应的超时时间
def param_timeout():
    # ret = requests.get('http://google.com/', timeout=1)
    # print(ret)
 
    # ret = requests.get('http://google.com/', timeout=(5, 1))
    # print(ret)
    pass
<br>
# 是允许否重定向
def param_allow_redirects():
    ret = requests.get('http://127.0.0.1:8000/test/', allow_redirects=False)
    print(ret.text)
<br>
# 代理 出口IP  不是本机IP。 流程是:先给代理发,代理帮助我们向目的地址发。
def param_proxies():
    # proxies = {
    # "http": "61.172.249.96:80",
    # "https": "http://61.185.219.126:3128",
    # }
 
    # proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}
 
    # ret = requests.get("http://www.proxy360.cn/123456", proxies=proxies)
    # print(ret.headers)
 
 
    # from requests.auth import HTTPProxyAuth
    #
    # proxyDict = {
    # 'http': '77.75.105.165',
    # 'https': '77.75.105.165'
    # }
    # auth = HTTPProxyAuth('username', 'mypassword')
    #
    # r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth)
    # print(r.text)
 
    pass
<br>
# 流形式 比如下片
def param_stream():
    ret = requests.get('http://127.0.0.1:8000/test/', stream=True)
    print(ret.content)
    ret.close()
 
    # from contextlib import closing
    # with closing(requests.get('http://httpbin.org/get', stream=True)) as r:
    # # 在此处理响应。迭代处理
    # for i in r.iter_content():
    # print(i)
 
 
def requests_session():
    import requests
 
    session = requests.Session()
 
    ### 1、首先登陆任何页面,获取cookie
 
    i1 = session.get(url="http://dig.chouti.com/help/service")
 
    ### 2、用户登陆,携带上一次的cookie,后台对cookie中的 gpsd 进行授权
    i2 = session.post(
        url="http://dig.chouti.com/login",
        data={
            'phone': "8612345678977",
            'password': "xxxxxx",
            'oneMonth': ""
        }
    )
 
    i3 = session.post(
        url="http://dig.chouti.com/link/vote?linksId=8589623",
    )
    print(i3.text)

 http 与 https 区别

  • http

本质上就是 socket,http 请求不安全,因为没有任何的加密措施。

  • https

拥有加密措施,ssh 加密,有证书一说,服务器给请求的客户端颁发证书,客户端使用证书对客户端发送的数据加密成密文,然后发送给服务器,服务器通过证书进行解密,检测是否是匹配的,进行传输信息。通信间必须使用证书。cert参数是证书,主动提供证书,可以自己制作(缺钱的话),比如证书是“fuck.pem”,cert=('fuck.pem'),必须使用证书,如果没有证书则不能进行通信。还有一类证书需要自己买的第三方可信赖的证书,系统在创建(一装机)的时候直接植入证书,厂商帮忙做验证,这就是有钱和没钱的区别,用户不需要自己在浏览器上安装证书了,pem是证书的格式,cert=('fuck.crt','xxx.key'),和自己办法的没区别,需要啥样给啥样,完成的事都是做加密使用。还有一个参数叫 verify,如果 verify=False,则表示忽略证书,直接发请求直接拿结果,一般网站是允许用的,但是服务器必须要证书也白搭。

以上就是python request 模块详细介绍的详细内容,更多关于python request 模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python应用程序在windows下不出现cmd窗口的办法
May 29 Python
Python3基础之基本运算符概述
Aug 13 Python
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
python实现媒体播放器功能
Feb 11 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
python 爬取学信网登录页面的例子
Aug 13 Python
python支付宝支付示例详解
Aug 22 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
python 利用Pyinstaller打包Web项目
Oct 23 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 #Python
python各种excel写入方式的速度对比
Nov 10 #Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 #Python
详解vscode实现远程linux服务器上Python开发
Nov 10 #Python
Python调用飞书发送消息的示例
Nov 10 #Python
python中pyplot基础图标函数整理
Nov 10 #Python
python图片合成的示例
Nov 09 #Python
You might like
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
python之Socket网络编程详解
2016/09/29 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
医药工作者的求职信范文
2013/09/21 职场文书
企划经理的岗位职责
2013/11/17 职场文书
聘用意向书范本
2014/04/01 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
疾病防治方案
2014/05/31 职场文书
工厂车间标语
2014/06/19 职场文书
2015年护士节慰问信
2015/03/23 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python