GET请求CURL未转义字符问题及POST调用需求求助
解决方案
一、修正GET请求,实现自动字符转义
Swagger会自动对请求中的特殊字符做URL编码,直接使用curl时若URL包含特殊字符(如空格、&、=等),需确保curl自动处理编码,同时完整保留返回的XML内容:
使用以下命令发起GET请求,将结果保存到临时文件避免终端输出丢失字符:
curl -X GET 'http://some/some/sample' \ -H 'accept: application/json' \ -H 'authorization: admin' \ -o response.xml
如果URL带特殊字符参数,可通过--data-urlencode让curl自动编码(GET请求下会自动拼接到URL后):
curl -X GET 'http://some/some/sample' \ -H 'accept: application/json' \ -H 'authorization: admin' \ --data-urlencode "param=value with special chars" \ -o response.xml
二、将XML内容转义后填入POST请求
JSON字符串中的双引号、反斜杠、换行符等特殊字符必须转义才能合法填入config字段,推荐用jq工具自动完成转义:
- 先安装
jq(若未安装):
# Debian/Ubuntu系统 apt-get install jq -y # RHEL/CentOS系统 yum install jq -y
- 执行以下命令,自动转义XML并完成POST请求:
curl -X POST 'http://some/some' \ -H 'accept: application/json' \ -H 'authorization: admin' \ -H 'Content-Type: application/json' \ -d "$(jq -n --arg xml "$(cat response.xml)" '{ "components": [ { "locator": "sample1", "config": $xml } ] }')"
说明:
jq会自动处理XML中的特殊字符(转义双引号、反斜杠、换行等),生成完全合法的JSON结构,无需手动转义。
三、排查GET结果不一致的补充建议
若修正编码后结果仍和Swagger有差异,可对比两者的请求细节:
- 用
curl -v查看curl发送的请求头,和浏览器开发者工具中Swagger的请求头对比,确保所有请求头(如User-Agent、Content-Type)完全一致 - 检查URL及查询参数的顺序、编码方式是否完全匹配
内容的提问来源于stack exchange,提问作者cojocaru robert
相关产品推荐
相关产品推荐

