我正在使用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"
答案 0 :(得分:2)
如果您(正确)在参数中使用了%23
,但是您得到了
"http://...?...&arguments=-Arest3Trigger1"
^
缺少%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"
}
答案 1 :(得分:1)
Curl不会将#
变成备注。 #
符号及其后的所有内容均不打算发送到服务器,因此不可以卷曲。
#
之前的部分发送到服务器,并确定服务器发送回什么。
在标准HTML中,#
之后的部分用于滚动到锚点或具有给定名称的元素。
使用浏览器中的JavaScript,脚本可以确定#
之后的部分,并用它来完成其想做的事情。
但是curl不是JavaScript解释器,它只是从服务器获取数据,因此它会忽略#
之后的部分。
答案 2 :(得分:0)
我相信这确实会破坏HTTP规范,但是,如果您确实想这样做(并且您可能不想这样做),我相信您可以滥用-X
来完成它:
curl 'http://Server.com' -X "$(printf 'GET /Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest#Trigger1 HTTP/1.1\r\nX-ignore-this: ')"
这将为您提供:
GET /Magicxpi4.6/MgWebRequester.dlll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-Arest#Trigger1 HTTP/1.1
X-ignore-this: / HTTP/1.1
Host: Server.com
User-Agent: curl/7.63.0
Accept: */*
...但是,实际上没有理智的HTTP服务器会要求您执行此操作,如果您想在其中添加主题标签,则将其像%23
一样用urlencode进行编码,但这可能意味着您需要通用的URL,编码器也是如此