Как я могу помешать CURL превратить «#» в комментарий? - PullRequest
0 голосов
/ 24 февраля 2019

Я использую 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"

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Если вы (правильно) используете %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"
}
0 голосов
/ 24 февраля 2019

Я верю, что это буквально нарушит спецификации 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-сервер на самом деле не потребует от вас этого, если вы хотите использовать хэш-тег в трех словах, urlencode, например, %23 ... ноэто, вероятно, означает, что вам нужен универсальный URL-кодировщик тоже

0 голосов
/ 24 февраля 2019

Curl не превращает # в замечание.Знак # и все, что следует, не предназначены для отправки на сервер, и поэтому curl - нет.

Часть перед # отправляется на сервер и определяет, что сервер отправляетназад.

В стандартном HTML эта часть после # используется для прокрутки до якоря или элемента с заданным именем.

С помощью JavaScript в браузере скрипт может определитьчасть после # и используйте это, чтобы делать то, что он хочет.

Но curl не интерпретатор JavaScript, он просто выбирает данные с сервера, поэтому он игнорирует часть после #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...