首页 > 解决方案 > 如何防止 CURL 将“#”变成评论?

问题描述

我正在使用 CURL 来调用端点。

我的端点#是其中的一部分,例如

"http://Server.com/Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest#Trigger1"

当我使用 CURL 命令调用此端点时,它会在井号之后切断我的端点,剩下的就是:

"http://Server.com/Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest" ('#Trigger1' is missing)

我试图替换已签名的%23,我得到以下结果:

"http://Server.com/Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest3Trigger1"

使用的完整命令:

curl -H "Content-Type: application/json" -X POST -d "{"id":"1"}" "http://Server.com/Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest#Trigger1"

标签: curlcmd

解决方案


如果你(正确地)%23在参数中使用,但你得到

"http://...?...&arguments=-Arest3Trigger1"
                                ^

使用 missing %2,您可能正在从批处理文件进行调用,并且%2正在被解析为批处理文件的第二个参数(在这种情况下为空)。

如果是这种情况,您将需要通过将百分号加倍来​​转义百分号,使用%%23.

从批处理文件中的行

curl "http://httpbin.org/anything?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest%%23Trigger1"

调用httpbin.org请求和响应服务将返回

{
  "args": {
    "appname": "IFSCarolina_Prod",
    "arguments": "-Arest#Trigger1",
    "prgname": "HTTP"
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.55.1"
  },
  "json": null,
  "method": "GET",
  "origin": "   .   .   .   ",
  "url": "https://httpbin.org/anything?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest%23Trigger1"
}

推荐阅读