Python ❀ 使用代码实现API接口调用详解

文章目录

  • [1. 工具准备](#1. 工具准备)
    • [1.1. requests代码包](#1.1. requests代码包)
    • [1.2. BurpSuite抓包工具](#1.2. BurpSuite抓包工具)
  • [2. 操作过程](#2. 操作过程)
    • [2.1. 一个简单的请求](#2.1. 一个简单的请求)
      • [2.1.1. Burp获取响应](#2.1.1. Burp获取响应)
      • [2.1.2. 转发获取响应](#2.1.2. 转发获取响应)
    • [2.2. 构造GET类型URL参数](#2.2. 构造GET类型URL参数)
    • [2.3. 构造请求头部](#2.3. 构造请求头部)
    • [2.4. 构造POST类型payload数据](#2.4. 构造POST类型payload数据)
      • [2.4.1. urlencoded格式](#2.4.1. urlencoded格式)
      • [2.4.2. json格式](#2.4.2. json格式)

本文主要讲解常用API接口如何使用python实现。
API :Application Programming Interface,是应用程序开发接口的缩写,意思是一些预设好的函数或方法,这些预设好的函数或方法允许第三方程序通过网络来调用数据或提供基于数据的服务。

1. 工具准备

Python运行环境:python3.10.2 + PyCharm

1.1. requests代码包

使用pip install requests安装此代码包,pip安装教程

1.2. BurpSuite抓包工具

BurpSuite安装教程,参考1.2章节设置http协议代理为127.0.0.1,端口8080,完成后开启Intercept劫持功能

2. 操作过程

2.1. 一个简单的请求

使用python发现一个简单的GET请求,并且通过BurpSuite抓取其请求

python 复制代码
import requests

# URL
host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

# 配置Burp截取配置
proxies = {'http':'http://127.0.0.1:8080'}

# 发送请求
reponse = requests.get(url=url, proxies=proxies)

print(reponse.text)

代码运行后,会在BurpSuite上回显一条http请求,即为该代码构造的http请求:

将此请求放入重放或者点击代理的forwafd转发即可看到其具体响应内容。

2.1.1. Burp获取响应

使用BurpSuite的Repeater重放功能就可以直接查看到Response响应。

2.1.2. 转发获取响应

使用Proxy代理模块中的Forward转发可以将请求发送到服务侧,即可在原软件获得Response响应。

2.2. 构造GET类型URL参数

python 复制代码
import requests

host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

# 构造参数
params = {
    'username' : 'test',
    'passwd' : 'aaabbbccc1234567890'
}

proxies = {'http':'http://127.0.0.1:8080'}

reponse = requests.get(url=url, proxies=proxies, params=params)

print(reponse.text)

执行结果:

像这种/username=test&passwd=aaabbbccc1234567890的参数格式称之为 urlencoded 格式,主要是以键值对key=value和拼接字符&组合成http请求参数。

2.3. 构造请求头部

参考文章:HTTP协议头部字段梳理

python 复制代码
import requests

host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

params = {
    'username' : 'test',
    'passwd' : 'aaabbbccc1234567890'
}

# 构造头部字段,注意大小写!
headers = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Referer' : 'www.aaa.bbb.ccc.com'
}

proxies = {'http':'http://127.0.0.1:8080'}

reponse = requests.get(url=url, proxies=proxies, params=params, headers=headers)

print(reponse.text)

执行结果:

2.4. 构造POST类型payload数据

python 复制代码
import requests

host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

params = {
    'username' : 'test',
    'passwd' : 'aaabbbccc1234567890'
}

headers = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Referer' : 'www.aaa.bbb.ccc.com'
}

# 设置payload
payload = '''
<!--  Edited by XMLSpy®  -->
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
'''

proxies = {'http':'http://127.0.0.1:8080'}

# 修改类型为POST,设置payload对象编码为UTF-8(中文编码)
reponse = requests.post(url=url, proxies=proxies, params=params, headers=headers, data=payload.encode('utf-8'))

print(reponse.text)

执行结果:

2.4.1. urlencoded格式

urlencoded格式解释详见本文2.2章节内容

python 复制代码
import requests

host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

params = {
    'username' : 'test',
    'passwd' : 'aaabbbccc1234567890'
}

headers = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Referer' : 'www.aaa.bbb.ccc.com'
}

payload = {
    'key1' : 'value1',
    'key2' : 'value2'
}

proxies = {'http':'http://127.0.0.1:8080'}

reponse = requests.post(url=url, proxies=proxies, params=params, headers=headers, data=payload)

print(reponse.text)

执行结果:

2.4.2. json格式

参考文章:JSON数据格式与格式化操作详解

python 复制代码
import json
import requests

host = 'www.testcode.com'
port = '9201'
url = 'http://' + host + ':' + port

params = {
    'username' : 'test',
    'passwd' : 'aaabbbccc1234567890'
}

headers = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Referer' : 'www.aaa.bbb.ccc.com'
}

payload = {
    'key1' : 'value1',
    'key2' : {
        'key3' : 'value3',
        'key4' : {
            'key5' : '测试'
        }
    }
}

proxies = {'http':'http://127.0.0.1:8080'}

# payload数据使用json.dumps转化为str,ensure_ascii=False代表关闭非ASCII字符转义
# 若不关闭非ASCII字符转义,则"测试"回显为转义后的ASCII字符"\u6d4b\u8bd5",两者意思一致
reponse = requests.post(url=url, proxies=proxies, params=params, headers=headers, data=json.dumps(payload, ensure_ascii=False).encode())

print(reponse.text)
相关推荐
沐知全栈开发24 分钟前
前端控制器模式
开发语言
C***115033 分钟前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
Percep_gan1 小时前
解决java.security.InvalidKeyException: Illegal key size
java·开发语言
西部秋虫1 小时前
YOLO 训练车牌定位模型 + OpenCV C++ 部署完整步骤
c++·python·yolo·车牌识别
CryptoPP2 小时前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
18你磊哥2 小时前
chromedriver.exe的使用和python基本处理
开发语言·python
小坏讲微服务2 小时前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
Kiri霧2 小时前
Scala 循环控制:掌握 while 和 for 循环
大数据·开发语言·scala
闲人编程2 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
qq_172805592 小时前
Go 语言结构型设计模式深度解析
开发语言·设计模式·golang