python笔记8:requests模块

简介:

requests是python的一个http客户端库,跟urlib、urlib2类似,requests模块是基于urlib模块开发的,代码实现更为简洁。

模块安装:

pip install requests ,使用requests模块时直接import requests即可。

简单使用requests:

http协议的接口,请求方式分为get和post,这2种最为常用。请求参数常用的形式有key-value、json、文件上传、接口添加cookies、headers等操作。

get请求-url拼接参数:

import requests
url = ‘http://127.0.0.1:5000/gettest?username=abc‘
#返回结果类型是字符串:{"msg": "pass"}
res = requests.get(url).text

也可以使用.json(),返回结果类型是字典 (注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型是字典:{‘msg‘: ‘pass‘}
res_dic = requests.get(url).json()

get请求- 请求参数类型是key-value形式:

import requests
url = ‘http://127.0.0.1:5000/gettest‘
#请传参类型是 name=xxx&pwd=123456
data = {"username": "abc"}
#返回结果类型是str:{"msg": "pass"}
res = requests.get(url, data).text

也可以使用.json(),返回结果类型是字典 (注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型是字典:{"msg": "pass"}
res_dic = requests.get(url, data).json()
get请求调用的接口实现如下:

 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4
 5 server = flask.Flask(__name__)
 6 @server.route(‘/gettest‘, methods=[‘get‘])
 7 def test1():
 8     name = request.values.get(‘username‘)
 9     if name == ‘abc‘:
10         #接口返回值类型为字典
11         res = {"msg": "pass"}
12         return jsonify(res)
13     else:
14         res = {‘msg‘: "fail"}
15         return jsonify(res)
16 server.run(debug=True)

post请求 - url拼接参数

import requests
import json
url = ‘http://127.0.0.1:5000/gettest?username=abc‘
#返回结果类型是str:{"msg": "pass"}
res = requests.post(url).text
#可以通过json.loads将字符串(json串)转换为字典类型,方便取值操作
res_dic = json.loads(res)

也可以使用.json(),返回结果类型是字典 (注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型为字典:{‘msg‘: ‘pass‘},字典取值操作比较方法
res_dic = requests.post(url).json()

post请求 - 传参类型是key-value形式

import requests
import json
url = ‘http://127.0.0.1:5000/gettest?username=abc‘
data = {"username": "abc"}
#返回结果类型是str:{"msg": "pass"}
res = requests.post(url, data).text
#可以通过json.loads将字符串(json串)转换为字典类型,方便取值操作
res_dic = json.loads(res)

也可以使用.json(),返回结果类型是字典 (注:接口请求的返回值类型 与接口的返回定义类型有关)

#返回结果类型为字典:{‘msg‘: ‘pass‘},字典取值操作比较方法
res_dic = requests.post(url, data).json()
post请求调用的接口实现如下:

 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4
 5 server = flask.Flask(__name__)
 6 @server.route(‘/gettest‘, methods=[‘post‘])
 7 def test1():
 8     #request.values.get(‘xxx‘) 这种获取请求参数的方式,可以通过url拼接参数和key-value形式访问接口。
 9     name = request.values.get(‘username‘)
10     if name == ‘abc‘:
11         #接口返回值类型为字典
12         res = {"msg": "pass"}
13         return jsonify(res)
14     else:
15         res = {‘msg‘: "fail"}
16         return jsonify(res)
17 server.run(debug=True)

post请求- 传参类型是json

import requests
url = ‘http://127.0.0.1:5000/register‘
data = {
    "username": "admin",
    "pwd": "123456",
    "c_pwd": "123456"
}
#json类型传参,post接口请求时,需要指明下请求参数是json类型,返回结果是字典:{‘msg‘: ‘ok‘}
res = requests.post(url, json=data).json()
print(type(res), res)

post请求- 传参类型是json,多层json嵌套

import requests
url = ‘http://127.0.0.1:5000/register‘
data = {
    "username": "admin",
    "pwd": "123456",
    "c_pwd": "123456",
    "items": {
        "id": 1,
        "age": 18,
        "sex": "man"
    }
}
#json类型传参,post接口请求时,需要指明下请求参数是json类型,返回结果是字典:{‘msg‘: ‘ok‘}
res = requests.post(url, json=data).json()
post请求调用的接口,json传参,代码实现如下:

 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4
 5 server = flask.Flask(__name__)
 6 @server.route(‘/register‘, methods=[‘post‘])
 7 def test1():
 8     #request.json,传参类型为json,返回结果类型为字典:{‘pwd‘: ‘123456‘, ‘username‘: ‘asdf‘, ‘c_pwd‘: ‘123456‘}
 9     res_dic = request.json
10     username = res_dic.get(‘username‘)
11     pwd = res_dic.get(‘pwd‘)
12     c_pwd = res_dic.get(‘c_pwd‘)
13     if username and pwd and c_pwd:
14         if res_dic.get(‘username‘) == ‘admin‘:
15             if res_dic.get(‘pwd‘) == res_dic.get(‘c_pwd‘):
16                 return jsonify({‘msg‘: "ok"})
17             else:
18                 return jsonify({‘msg‘: "密码不一致"})
19         else:
20             return jsonify({‘msg‘: "username不能注册"})
21 server.run(debug=True)

post请求 - 上传文件

import requests
url = ‘http://127.0.0.1:5000/upload‘
#上传接口请求数据,指定上传文件的路径
data = {"file_name": open(‘E:/python_workspace/base-code/asdf.txt‘, encoding=‘utf8‘)}
#post请求,请求参数类型是file,返回结果类型是字典
res = requests.post(url, files=data).json()
print(type(res), res)
post请求调用的上传接口,代码实现如下:

 1 import flask
 2 from flask import request
 3 from flask import jsonify
 4 import time, os
 5 from flask import send_from_directory
 6 #上传文件接口
 7 server = flask.Flask(__name__)
 8 @server.route(‘/upload‘, methods=[‘post‘])
 9 def upload():
10     #获取请求参数,传参类型是file,返回结果类型是一个对象:<class ‘werkzeug.datastructures.FileStorage‘> <FileStorage: ‘新建文本文档.txt‘ (‘text/plain‘)>
11     file = request.files.get(‘file_name‘, None)
12     #判断file是否为空,若为空则没有上传文件
13     if file:
14         cur_time = time.strftime(‘%Y%m%d%H%M%S‘)  #获取当前时间
15         upload_name = file.filename               #获取上传文件的名称
16         new_file_name = cur_time+upload_name      #给文件重命名,防止有重复文件覆盖
17         # 保存文件,指定文件上传的路径
18         file.save(‘E:/python_workspace/base-code/‘+new_file_name)
19         return jsonify({"code": "ok"})
20     else:
21         return jsonify({"code": "请上传文件"})
22
23 if __name__ == ‘__main__‘:
24     server.run(debug=True)

post请求 - 添加cookies

import requests
url = ‘http://127.0.0.1:5000/set_cookies‘
data = {"username": "xiaobai", "monkey": "999"}
#请求cookie参数
cookie = {"token": "123456"}
#接口请求,返回结果类型是字典:{‘msg‘: ‘ok‘}
res = requests.post(url, data=data, cookies=cookie).json()
print(type(res), res)
post请求调用的添加cookie接口,代码实现如下:

 1 import flask
 2 from flask import  request
 3 from flask import  jsonify
 4 server = flask.Flask(__name__)
 5 @server.route(‘/set_cookies‘, methods=[‘post‘])
 6 def set_cookies():
 7     print(‘获取到的cookie:‘, request.cookies)      #{‘token‘: ‘123456‘}
 8     print(‘获取到的请求数据:‘, request.values)    # CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([(‘monkey‘, ‘999‘), (‘username‘, ‘xiaobai‘)])])
 9     token = request.cookies.get(‘token‘)
10     if token:
11         return jsonify({"msg": "ok"})
12     else:
13         return jsonify({"msg": "没有添加cookie"})
14
15 if __name__ == ‘__main__‘:
16     server.run(debug=True)

post请求- 添加headers

import requests
header_url = ‘http://127.0.0.1:5000/set_headers‘
data = {"username": "123456", "monkey": "666"}
#添加header信息
header = {‘Content-Type‘: "application/json"}
#接口请求
res = requests.post(header_url, data, headers=header).json()

欢迎评论~~~

时间: 2024-10-05 06:16:59

python笔记8:requests模块的相关文章

Python高手之路【八】python基础之requests模块

1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 在Python的世界里,事情不应该这么麻烦. Requests 使用的是 urllib3,因此继承了它的所有特性.Request

Python接口测试-使用requests模块发送post请求

本篇主要记录下使用python的requests模块发送post请求的实现代码. #coding=utf-8 import unittest import requests class PostTest(unittest.TestCase): def setUp(self): host = 'https://httpbin.org/' endpoint = 'post' self.url = ''.join([host, endpoint]) def testPost(self): params

python urllib和requests模块

urllib模块是python自带的,直接调用就好,用法如下: 1 #处理get请求,不传data,则为get请求 2 import urllib 3 from urllib.request import urlopen 4 from urllib.parse import urlencode 5 url='http://127.0.0.1:1990/login' 6 data={"username":"admin","password":123

python网络编程----requests模块

python访问网站可以用标准模块--urllib模块(这里省略),和requests(安装-pip install requests)模块,requests模块是在urllib的基础上进行的封装,比urllib模块功能更强到,易用 import json,requests #发送get请求 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑马' req = requests.get(url) #发送get请求 print(req.t

python学习-使用requests模块查询ip地址

思路是,使用requests模块调用阿里的ip接口查询ip归属地 关于requests模块的使用,可以查询相关文档,很强大,本次不做描述 #!/usr/bin/python #coding=utf-8 import requests   def checkip(ip):       URL = 'http://ip.taobao.com/service/getIpInfo.php'     try:         r = requests.get(URL, params=ip, timeout

Python网络爬虫-requests模块(II)

有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/env python # -*- coding:utf-8 -*- import requests if __name__ == "__main__": #张三人人网个人信息页面的url url = 'http://www.renren.com/289676607/profile' #伪装UA

python 爬虫 基于requests模块的get请求

需求:爬取搜狗首页的页面数据 import requests # 1.指定url url = 'https://www.sogou.com/' # 2.发起get请求:get方法会返回请求成功的响应对象 response = requests.get(url=url) # 3.获取响应中的数据:text属性作用是可以获取响应对象中字符串形式的页面数据 page_data = response.text # 4.持久化数据 with open("sougou.html","w&

python 爬虫 基于requests模块发起ajax的get请求

基于requests模块发起ajax的get请求 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 用抓包工具捉取 使用ajax加载页面的请求 鼠标往下下滚轮拖动页面,会加载更多的电影信息,这个局部刷新是当前页面发起的ajax请求, 用抓包工具捉取页面刷新的ajax的get请求,捉取滚轮在最底部时候发起的请求 这个get请求是本次发起的请求的url ajax的get请求携带参数 获取响应内容不再是页面数据,是json字符串,是通过异步请求获取的电影

python接口测试中—Requests模块的使用

Requests模块的使用 中文文档API:http://2.python-requests.org/en/master/ 1.发送get.post请求 import requests reponse = requests.get("http://www.baidu.com") reponse = requests.post("http://www.baidu.com") 2.响应的属性 查看响应内容 response.text 属性 respone.content

python - 怎样使用 requests 模块发送http请求

最近在学python自动化,怎样用python发起一个http请求呢? 通过了解 request 模块可以帮助我们发起http请求 步骤: 1.首先import 下 request 模块 2.然后看请求的方式,选择对应的请求方法 3.接受返回的报文信息 例子:get 方法 import requests url ="https://www.baidu.com" res = requests.get(url) res.encoding = "utf-8" res.te