python第三方库requests简单介绍

一、发送请求与传递参数

简单demo:

import requests

r = requests.get(url=‘http://www.itwhy.org‘)    # 最基本的GET请求
print(r.status_code)    # 获取返回状态
r = requests.get(url=‘http://dict.baidu.com/s‘, params={‘wd‘:‘python‘})   #带参数的GET请求
print(r.url)
print(r.text)   #打印解码后的返回数据

1、带参数的请求

import requests
requests.get(‘http://www.dict.baidu.com/s‘, params={‘wd‘: ‘python‘})    #GET参数实例
requests.post(‘http://www.itwhy.org/wp-comments-post.php‘, data={‘comment‘: ‘测试POST‘})    #POST参数实例

2、post发送json数据:

import requests
import json

r = requests.post(‘https://api.github.com/some/endpoint‘, data=json.dumps({‘some‘: ‘data‘}))
print(r.json())

3、定制header:

import requests
import json

data = {‘some‘: ‘data‘}
headers = {‘content-type‘: ‘application/json‘,
           ‘User-Agent‘: ‘Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0‘}

r = requests.post(‘https://api.github.com/some/endpoint‘, data=data, headers=headers)
print(r.text)

二、response对象

使用requests方法后,会返回一个response对象,其存储了服务器响应的内容,如上实例中已经提到的 r.text、r.status_code……
获取文本方式的响应体实例:当你访问 r.text 之时,会使用其响应的文本编码进行解码,并且你可以修改其编码让 r.text 使用自定义的编码进行解码

响应:

r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常

demo:

import requests

URL = ‘http://ip.taobao.com/service/getIpInfo.php‘  # 淘宝IP地址库API
try:
    r = requests.get(URL, params={‘ip‘: ‘8.8.8.8‘}, timeout=1)
    r.raise_for_status()    # 如果响应状态码不是 200,就主动抛出异常
except requests.RequestException as e:
    print(e)
else:
    result = r.json()
    print(type(result), result, sep=‘\n‘)

# 结果:
# <class ‘dict‘>
# {‘code‘: 0, ‘data‘: {‘ip‘: ‘8.8.8.8‘, ‘country‘: ‘美国‘, ‘area‘: ‘‘, ‘region‘: ‘XX‘, ‘city‘: ‘XX‘, ‘county‘: ‘XX‘, ‘isp‘: ‘Level3‘, ‘country_id‘: ‘US‘, ‘area_id‘: ‘‘, ‘region_id‘: ‘xx‘, ‘city_id‘: ‘xx‘, ‘county_id‘: ‘xx‘, ‘isp_id‘: ‘200053‘}}

三、上传文件

1、上传文件

import requests

url = ‘http://127.0.0.1:5000/upload‘
files = {‘file‘: open(‘/home/lyb/sjzl.mpg‘, ‘rb‘)}
#files = {‘file‘: (‘report.jpg‘, open(‘/home/lyb/sjzl.mpg‘, ‘rb‘))}     #显式的设置文件名

r = requests.post(url, files=files)
print(r.text)

2、可以把字符串当着文件进行上传:

import requests

url = ‘http://127.0.0.1:5000/upload‘
files = {‘file‘: (‘test.txt‘, b‘Hello Requests.‘)}     #必需显式的设置文件名

r = requests.post(url, files=files)
print(r.text)

四、身份验证

1、基本身份认证(HTTP Basic Auth):

import requests
from requests.auth import HTTPBasicAuth

r = requests.get(‘https://httpbin.org/hidden-basic-auth/user/passwd‘, auth=HTTPBasicAuth(‘user‘, ‘passwd‘))
# r = requests.get(‘https://httpbin.org/hidden-basic-auth/user/passwd‘, auth=(‘user‘, ‘passwd‘))    # 简写
print(r.json())

2、非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:

requests.get(URL, auth=HTTPDigestAuth(‘user‘, ‘pass‘))

五、Cookies与会话对象

1、如果某个响应中包含一些Cookie,你可以快速访问它们:

import requests

r = requests.get(‘http://www.google.com.hk/‘)
print(r.cookies[‘NID‘])
print(tuple(r.cookies))

2、要想发送你的cookies到服务器,可以使用 cookies 参数:

import requests

url = ‘http://httpbin.org/cookies‘
cookies = {‘testCookies_1‘: ‘Hello_Python3‘, ‘testCookies_2‘: ‘Hello_Requests‘}
# 在Cookie Version 0中规定空格、方括号、圆括号、等于号、逗号、双引号、斜杠、问号、@,冒号,分号等特殊符号都不能作为Cookie的内容。
r = requests.get(url, cookies=cookies)
print(r.json())

六、超时与异常

timeout 仅对连接过程有效,与响应体的下载无关。

>>> requests.get(‘http://github.com‘, timeout=0.001)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host=‘github.com‘, port=80): Request timed out. (timeout=0.001)

七、实例demo

1、使用python第三方库requests,结合unittest、ddt数据驱动,实现get请求:使用多个搜索词,实现多条搜索case用例测试

import requests
import unittest
import ddt

@ddt.ddt
class testClass(unittest.TestCase):

    @ddt.data("App专项测试", "自动化", "Python")
    def testGet(self, queryword):
        #header部分的配置
        headers_data = {
            ‘User-Agent‘:‘Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36‘,
            ‘Host‘:‘m.imooc.com‘,
            ‘Referer‘: ‘https://m.imooc.com/‘,
            ‘Connection‘:‘keep-alive‘, # 持续连接
            ‘Accept-Encoding‘:‘gzip, deflate, br‘
        }

        #cookies部分的配置
        cookies_data = dict(imooc_uuid=‘f7356a8d-3dda-48b4-9a33-127b8f57e1db‘,
                            imooc_isnew_ct=‘1522158893‘,
                            imooc_isnew=‘2‘,
                            page = ‘https://m.imooc.com/‘)

        #get请求的构造
        res = requests.get(
            "https://m.imooc.com/search/?words="+queryword,
            headers=headers_data,
            cookies=cookies_data)

        #print res.status_code
        #print res.text

        self.assertTrue("共找到" in res.text)

if __name__ == "__main__":
    unittest.main()

2、使用python第三方库requests,结合unittest、ddt数据驱动,实现post请求:使用多个账户密码,实现多个用户登录测试

import requests
import unittest
import ddt

@ddt.ddt
class testClass(unittest.TestCase):

    @ddt.data(
        ("15977778888", "999999"),
        ("15977778889", "999998")
    )
    @ddt.unpack  # 数据是元组或列表等格式,需要经过unpack解包后,再用于驱动实例
    def testPost(self, username_data, password_data):
        formdata = {
            "username": username_data,
            "password": password_data,
            "verify": ‘‘,
            "referer":‘https://m.imooc.com‘}

        headers_data = {
            ‘User-Agent‘: ‘Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36‘,
            ‘Host‘: ‘m.imooc.com‘
        }

        #cookies部分的配置
        cookies_data = dict(imooc_uuid=‘ffbd103a-b800-4170-a267-4ea3b301ff06‘,
                            imooc_isnew_ct=‘1511175583‘,
                            imooc_isnew=‘2‘,
                            page = ‘https://m.imooc.com/‘)

        res = requests.post("https://m.imooc.com/passport/user/login",
            data = formdata,
            headers = headers_data,
            cookies = cookies_data
        )

        print(res.json())  # res是json_str格式,res.json():转化成字典格式
        print(type(res.json()))
        self.assertTrue(90003 == res.json()[‘status‘] or 10005 == res.json()[‘status‘])  # 判断状态码是否是90003或10005

if __name__ == "__main__":
    unittest.main()

运行结果:

G:\Python\selenium_test\Scripts\python.exe G:/Python/selenium_test/ddt_case/selenium_test.py
.{‘status‘: 90003, ‘msg‘: ‘验证码为空‘, ‘data‘: []}
<class ‘dict‘>
{‘status‘: 90003, ‘msg‘: ‘验证码为空‘, ‘data‘: []}
<class ‘dict‘>
.
----------------------------------------------------------------------
Ran 2 tests in 1.057s

OK


备注:本文采集于:https://www.cnblogs.com/mrchige/p/6409444.html ,仅用于记录笔记学习!

原文地址:https://www.cnblogs.com/Eric15/p/9882258.html

时间: 2024-10-21 19:51:38

python第三方库requests简单介绍的相关文章

Python第三方库Requests学习

1.安装 1 git clone git://github.com/kennethreitz/requests.git 2 cd requests 3 python setup.py install 2.上点威力 (GET) 1 >>> import requests 2 >>> url = 'http://dict.baidu.com/s' 3 >>> payload = {'wd':'python'} 4 >>> r = requ

python第三方库requests详解

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求.Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner.更重要的一点是它支持 Python3 哦! Beautiful is better than ugly.(美丽优于丑陋) Explicit is better than im

常用第三方库的简单介绍

在IOS开发中我们不可避免的需要一些封装好的第三库.故总结一下是必要的 网络请求类: AFNetworking: 常用的网络请求组件,个人认为其封装比较完美,可亲求多种数据类型,如:JSON,Xml,图片,二进制文件.还可以将以上类型文件上传到后台,端的是牛逼的很.一般默认为是异步请求 在PCH文件中导入 #ifndef AFNetWorking___Net_pch #define AFNetWorking___Net_pch #ifndef TARGET_OS_IOS #define TARG

python第三方库安装

13万个第三方库 https://pypi.org PyPi:Python Package Index PSE维护的展示全球Python计算生态的主站 在pypi.org搜索blockchain 挑选适合开发目标的第三方库作为基础 完成自己需要的功能 安装Python第三方库: 使用pip命令 集成安装方法 文件安装方法 pip安装方法: D:\>pip download<第三方库> 下载但不安装指定的第三方库 D:\ >pip show <第三方库名> 列出某个指定第

python第三方库系列之十四--集群化部署定时任务apscheduler库

如果将定时任务部署在一台服务器上,那么这个定时任务就是整个系统的单点,这台服务器出现故障的话会影响服务.对于可以冗余的任务(重复运行不影响服务),可以部署在多台服务器上,让他们同时执行,这样就可以很简单的避免单点.但是如果任务不允许冗余,最多只能有一台服务器执行任务,那么前面的方法显然行不通.本篇文章就向大家介绍如何避免这种互斥任务的单点问题,最后再介绍一下基于APScheduler的分布式定时任务框架,这个框架是通过多个项目的实践总结而成的. 对于运行在同一台服务器上的两个进程,可以通过加锁实

常用Python第三方库简介

如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证,随着python的发展一些稳定的第三库被加入到了标准库里面,这里有6000多个第三方库的介绍 下表中加粗并且标红的都是我平时使用较多的一些第三方库. 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 常用Python第三方库 分类 库名称 库用途 Web框架 Django 开源web开发框架,它鼓励快速开发,并遵循MVC设计,我以前用过很多次,比较好用,开

3、python第三方库的安装方式

在学习Python过程中,经常要用到很多第三方库,面对各种不同情况,Python为我们提供了多种安装方法,这里主要介绍三种 方法:pycharm在线安装.pip在线安装(强烈推荐).离线安装. 方式一:pycharm在线安装 点击pycharm菜单栏File--Settings--Project:xx--Project Interpreter,点击+,搜索需要的库,点击Install Package  方式二:pip在线安装(强烈推荐) 按win+r,输入”cmd“回车,输入”pip insta

python第三方库学习之xlrd读取Excel文件

因为经常会涉及到从Excel表中导数据,所以就学习了python的xlrd来读取excel中的数据. 1.xlrd的安装 xlrd是python的第三方库,所以是需要自己安装的,可以在python的官网http://pypi.python.org/pypi/xlrd下载该模块来安装,也可以通过其他手段,比如easy_install或者pip啥的,我已经安装好pip所以就用最懒的方式来安装了pip install xlrd来安装. 2.分析excel文件的层级对象 要读取excel的数据,就要了解

Python 第三方库xlrd读取Excel代码

Python 第三方库xlrd读取Excel代码: 安装xlrd 安装xlrd,只需运行setup即可,另外你也可以直接解压缩到你的project中,也可以直接用 xlrd的API 获取Excel,这里称之为work book open_workbook(file_name) 获取指定的Sheet,有两种方式 sheet = xls.sheet_by_index(sheet_no) sheet = xls.sheet_by_name(sheet_name) 获取整行和整列的值(数组) sheet