You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带JSON数据的CURL GET请求转为浏览器可用的线性URL字符串

问题解答

一、配置文件中应填写的GET请求URL字符串

你的原curl命令存在一个容易混淆的细节:虽然指定了-X GET,但使用-d参数时,curl会自动将请求方法改为POST,实际发送的是携带JSON请求体的POST请求。而你的客户端仅支持GET请求,需要将请求体中的JSON内容URL编码后作为查询参数附加到URL中,示例如下:

http://12.34.56.78/api.cgi?user=admin&password=123456&data=%5B%7B%22cmd%22%3A%22AudioAlarmPlay%22%2C%22action%22%3A0%2C%22param%22%3A%7B%22channel%22%3A0%2C%22alarm_mode%22%3A%22times%22%2C%22times%22%3A1%7D%7D%5D

说明:这里将原JSON请求体作为data参数的值(你可能需要根据摄像头API文档确认是否接受这种参数名,若API要求其他参数名,替换即可),并对JSON字符串做了URL编码:
原JSON:[{"cmd":"AudioAlarmPlay","action":0,"param":{"channel": 0,"alarm_mode":"times","times":1}}]
URL编码后:%5B%7B%22cmd%22%3A%22AudioAlarmPlay%22%2C%22action%22%3A0%2C%22param%22%3A%7B%22channel%22%3A0%2C%22alarm_mode%22%3A%22times%22%2C%22times%22%3A1%7D%7D%5D

如果摄像头API支持直接将JSON作为查询参数(无需指定参数名),也可以尝试这种形式(但大部分API不支持):

http://12.34.56.78/api.cgi?user=admin&password=123456&%5B%7B%22cmd%22%3A%22AudioAlarmPlay%22%2C%22action%22%3A0%2C%22param%22%3A%7B%22channel%22%3A0%2C%22alarm_mode%22%3A%22times%22%2C%22times%22%3A1%7D%7D%5D

二、原curl命令实际生成的HTTP协议文本

如前所述,原curl命令实际发送的是POST请求,而非GET,对应的HTTP协议文本大致如下(部分字段会随curl版本、环境变化):

POST /api.cgi?user=admin&password=123456 HTTP/1.1
Host: 12.34.56.78
User-Agent: curl/7.81.0
Accept: */*
Content-Length: 107
Content-Type: application/x-www-form-urlencoded

[{"cmd":"AudioAlarmPlay","action":0,"param":{"channel": 0,"alarm_mode":"times","times":1}}]

注意:curl默认使用-d时,会设置Content-Type: application/x-www-form-urlencoded,但这里传输的是JSON数据,规范来说应该添加-H "Content-Type: application/json"参数,不过你的摄像头似乎兼容这种不规范的请求格式。

内容的提问来源于stack exchange,提问作者Mic Mac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:52