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获取网页状态码示例
Mar 30 Python
用Python输出一个杨辉三角的例子
Jun 13 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
12步教你理解Python装饰器
Feb 25 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python实现注册、登录小程序功能
Sep 21 Python
解决Python plt.savefig 保存图片时一片空白的问题
Jan 10 Python
Python 占位符的使用方法详解
Jul 10 Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 Python
Python Unittest原理及基本使用方法
Nov 06 Python
Python图片验证码降噪和8邻域降噪
Aug 30 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 autoload机制的详解
2013/06/09 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
2014/11/19 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
如何快速上手Vuex
2017/02/14 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
python实现扫雷游戏
2020/03/03 Python
Python如何进行时间处理
2020/08/06 Python
Python内置函数property()如何使用
2020/09/01 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
员工自我鉴定范文
2013/10/06 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
工程负责人任命书
2014/06/06 职场文书
领导班子四风表现材料
2014/08/23 职场文书
八项规定整改方案
2014/10/01 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏