Dify——HTTP 请求节点(货币换算示例)
- AI Tool
- 2025-10-31
- 28热度
- 0评论
HTTP 请求节点
允许通过 HTTP 协议发送服务器请求,适用于获取外部数据、webhook、生成图片、下载文件等情景。它让你能够向指定的网络地址发送定制化的 HTTP 请求,实现与各种外部服务的互联互通。
该节点支持常见的 HTTP 请求方法:
- GET,用于请求服务器发送某个资源。
- POST,用于向服务器提交数据,通常用于提交表单或上传文件。
- HEAD,类似于 GET 请求,但服务器不返回请求的资源主体,只返回响应头。
- PATCH,用于在请求-响应链上的每个节点获取传输路径。
- PUT,用于向服务器上传资源,通常用于更新已存在的资源或创建新的资源。
- DELETE,用于请求服务器删除指定的资源。
HTTP 请求 API 的核心通讯步骤
(为了接下来调用API,首先简单的理解HTTP的通讯过程,如果你对此不理解或者不感兴趣,可以直接阅读下一部分“一个简单的调用”,不会影响整个实验)
HTTP请求API的通讯过程,本质是客户端与服务器基于TCP协议,通过“请求-响应”模式完成数据交互的全过程,核心可拆分为5个步骤。
HTTP请求API的核心通讯步骤
- 建立TCP连接
客户端(如浏览器、APP)会先与API服务器的指定端口(默认80端口,HTTPS为443端口)建立TCP连接,这个过程通过“三次握手”完成,确保连接可靠。 - 发送HTTP请求
连接建立后,客户端向服务器发送HTTP请求。请求内容主要包含三部分:
- 请求行:指定请求方法(如GET、POST)、API路径(如
/api/user)和HTTP协议版本(如HTTP/1.1)。 - 请求头:携带附加信息,如
Content-Type(数据格式)、Authorization(身份验证)等。 - 请求体(可选):仅在POST、PUT等方法中存在,用于传递具体数据(如JSON格式的用户信息)。
- 服务器处理请求
服务器接收到请求后,会按以下流程处理:
- 解析请求行、请求头,确认请求合法性(如权限校验)。
- 执行对应的业务逻辑(如查询数据库、处理数据)。
- 生成需要返回给客户端的响应数据。
- 返回HTTP响应
服务器处理完成后,向客户端返回HTTP响应。响应内容同样包含三部分:
- 状态行:包含HTTP协议版本、状态码(如200表示成功,404表示资源不存在)。
- 响应头:携带服务器信息(如
Server: Nginx)、数据格式(如Content-Type: application/json)等。 - 响应体:核心数据,通常以JSON、XML等格式返回(如用户信息列表)。
- 关闭/复用TCP连接
- 若使用HTTP/1.0,响应返回后会直接关闭TCP连接。
- 若使用HTTP/1.1或HTTP/2,默认会开启“Keep-Alive”模式,连接会被复用,减少后续请求的连接耗时。
关键补充概念
- 请求方法:不同方法对应不同操作,常见的有GET(查询数据)、POST(提交数据)、PUT(修改数据)、DELETE(删除数据)。
- 响应状态码:分5大类,2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误),是判断请求结果的核心依据。
- HTTPS差异:若为HTTPS请求,会在TCP连接建立后、发送HTTP请求前,额外增加“TLS握手”步骤,实现数据加密传输,保障安全性。
调用API实现汇率换算
这是一个免费在线汇率换算器,支持人民币、美元、欧元等200多种世界货币和比特币等加密货币的实时转换。提供准确的实时汇率,支持中文货币名称,让您轻松进行全球货币换算。
接口地址: https://v2.xxapi.cn/api/exchange
请求参数
| 参数名 | 传递参数 | 传入位置 | 类型 | 参数说明 |
|---|---|---|---|---|
| from | 源货币 | query | 必传 | 支持货币代码或中文名称,如:USD、CNY、美元、人民币 |
| to | 目标货币 | query | 必传 | 支持货币代码或中文名称,如:USD、CNY、美元、人民币 |
| amount | 金额 | query | 必传 | 需要转换的金额 |
请求示例
import requests
url = "https://v2.xxapi.cn/api/exchange?from=USD&to=CNY&amount=100"
payload = {}
headers = {
'User-Agent': 'xiaoxiaoapi/1.0.0'
}
response = requests.request("GET", url, headers = headers, data = payload)
print(response.text)URL(Uniform Resource Locator)是API的“访问地址”,这里由「基础路径」和「查询参数」两部分组成:
| 组成部分 | 内容与含义 |
|---|---|
| 基础路径 | https://v2.xxapi.cn/api/exchange —— 标识这是“货币兑换API”的核心接口地址,服务器通过这个路径识别要执行的功能。 |
查询参数(?后) | 用&分隔的3个参数,是客户端向服务器传递的“业务数据”:- from=USD:原始货币类型为「美元」(USD是美元的ISO代码)- to=CNY:目标货币类型为「人民币」(CNY是人民币的ISO代码)- amount=100:原始金额为100(单位:美元) |
请求体(payload):payload = {}
payload是HTTP请求中「向服务器传递的正文数据」,通常用于POST/PUT等需要“提交数据”的请求(如提交表单、上传文件)。
- 这里
payload为空字典,因为本次是GET请求(仅获取数据,不修改服务器状态),所有业务参数已通过URL的查询字符串传递,无需在正文里附加数据。
请求头(headers):headers = {'User-Agent': 'xiaoxiaoapi/1.0.0'}
headers是HTTP请求的“元数据”,用于告诉服务器「请求的来源、格式、能力」等信息,这里仅设置了User-Agent:
User-Agent:标识“请求来自哪个客户端”,格式通常是「客户端名称/版本号」。
服务器可能会通过User-Agent做两件事:① 验证请求是否来自合法客户端(防止恶意请求);② 针对不同客户端返回适配的数据(如手机端vs电脑端)。
这里xiaoxiaoapi/1.0.0表示请求来自名为“xiaoxiaoapi”的客户端,版本是1.0.0。
发送请求并接收响应:response = requests.request("GET", url, headers=headers, data=payload)
这行代码是核心,调用requests库的request方法发送HTTP请求,并接收服务器返回的response对象。
关键参数解析:
"GET":HTTP请求方法,代表“从服务器获取数据”,适合查询类场景(如查汇率、查天气),且参数会暴露在URL中(前面的查询参数就是例子)。
对比:如果是POST方法,参数会放在payload(请求正文)中,更适合传递敏感数据(如密码、支付信息)。url:目标API地址(前面解析过)。headers:请求头(携带User-Agent)。data=payload:请求正文(这里为空,因为是GET请求)。
打印响应结果:print(response.text)
response是服务器返回的“响应对象”,包含状态码、响应头、响应正文等信息。response.text会将响应正文以字符串形式返回。
运行代码后,打印的结果就是文档中的JSON字符串:
{"code":200,"msg":"数据请求成功","data":{"amount":100,"from":"USD","rate":7.1137296096,"result":711.37296096,"to":"CNY","update_at":1761894300000},"request_id":"0f93a5d7bfd97b8b78374052"}返回示例
// 货币代码可以查看https://xxapi.cn/doc/allrates
{
"code": 200,
"msg": "数据请求成功",
"data": {
"amount": 100,
"from": "USD",
"rate": 7.3325486852,
"result": 733.25486852,
"to": "CNY",
"update_at": 1736700600000
},
"request_id": "821d95235d5917f746600d0b"
}响应正文是标准的JSON格式(键值对结构),每个字段都有明确的业务含义:
| 一级字段 | 类型 | 含义与子字段解析 |
|---|---|---|
code | 数字 | HTTP请求的“业务状态码”: - 200 代表「请求成功」(若为4xx/5xx则代表错误,如404=接口不存在)。 |
msg | 字符串 | 状态描述:数据请求成功 是对code=200的文字解释,方便开发者理解。 |
data | 对象 | 核心业务数据(兑换结果),包含6个子字段: - amount=100:原始金额(100美元)- from=USD:原始货币(美元)- rate=7.1137296096:实时汇率(1美元=7.1137296096人民币)- result=711.37296096:兑换结果(100美元≈711.37人民币)- to=CNY:目标货币(人民币)- update_at=1761894300000:汇率数据更新时间(毫秒级时间戳,需转换为正常时间,如用Python的time库转换)。 |
request_id | 字符串 | 请求唯一标识(0f93a5d7bfd97b8b78374052),用于排查问题(如向API服务商反馈错误时提供该ID)。 |
一个简单的调用
通过请求示例我们可以知道只需要满足请求值就可以获取到返回
通过浏览器直接访问
https://v2.xxapi.cn/api/exchange?from=USD&to=CNY&amount=100
浏览器返回
{"code":200,"msg":"数据请求成功","data":{"amount":100,"from":"USD","rate":7.1120637997,"result":711.20637997,"to":"CNY","update_at":1761901500000},"request_id":"72da6f33a96f95aca866b4ff"}
结构
https://v2.xxapi.cn/api/exchange?from=源货币&to=目标货币&amount=金额
类似的要查询10000人民币对日元可以如下构造请求
https://v2.xxapi.cn/api/exchange?from=CNY&to=JPY&amount=10000
浏览器返回
{"code":200,"msg":"数据请求成功","data":{"amount":10000,"from":"CNY","rate":21.68840044179673,"result":216884.0044179673,"to":"JPY","update_at":1761901500000},"request_id":"1c4bc75961722a2cc6a70cf4"}在HTTP 请求节点中使用API

在Git字段中填写准备好的请求
https://v2.xxapi.cn/api/exchange?from=CNY&to=JPY&amount=10000
HTTP 请求节点会返回四个输出变量
body string 响应内容
status_code number 响应状态码
headers object 响应头列表(JSON)
files Array[File] 文件列表直接回复模块中可以看见和浏览器返回了一样的内容
Dify中组合传递参数

首先在开始创建三个变量分别为
- source_currency 原始货币
- target_currency 目标货币
- amount 金额
在HTTP请求节点中将GET中的参数替换为变量
执行前记得输入对应的参数数据
格式化输出
在这里返回的是Json格式,我们可以使用Python来整理输出
import json
import time
def main(arg1: str):
raw_json_str = arg1
parsed_data = json.loads(raw_json_str)
return {
"result": parsed_data,
}
效果如下

最终效果

工作流下载:
https://pan.baidu.com/s/16NF9w_IbeInX6msrbaQVJQ?pwd=hczf 提取码: hczf