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 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
Python3.x中自定义比较函数
Apr 24 Python
Python守护进程用法实例分析
Jun 04 Python
python简单实现计算过期时间的方法
Jun 09 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
python requests爬取高德地图数据的实例
Nov 10 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
python MD5加密的示例
Oct 19 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
手残删除python之后的补救方法
Jun 26 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+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php读取xml实例代码
2010/01/28 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
python实现图书馆研习室自动预约功能
2018/04/27 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
python3 kubernetes api的使用示例
2021/01/12 Python
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
火山动力Java笔试题
2014/06/26 面试题
详解如何修改nginx的默认端口
2021/03/31 Servers
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
python双向链表实例详解
2022/05/25 Python