3

Я пытаюсь выполнить следующую команду под Windows 10:

D:\>curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

К сожалению, это приводит к многочисленным ошибкам:

curl: (6) Could not resolve host: firstName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Frodo,
curl: (6) Could not resolve host: lastName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Baggins
curl: (3) [globbing] unmatched close brace/bracket in column 1

Видимо, он не понимает синтаксис.

Почему и как это исправить?

D:\>curl --version
curl 7.46.0 (x86_64-pc-win32) libcurl/7.46.0 OpenSSL/1.0.2e zlib/1.2.8 WinIDN libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz

4 ответа4

3

Другой вариант - замаскировать двойные кавычки обратной косой чертой следующим образом:

curl -i -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"Frodo\",  \"lastName\" : \"Baggins\" }" http://localhost:8080/people
1

Похоже, вы используете cmd.exe . Правила экранирования персонажа в командной строке одновременно и архаичны, и ужасны. Я рекомендую использовать Powershell вместо этого; он использует правила, намного более сходные с правилами bash в других * nix-оболочках (хотя и не идентичные, особенно потому, что он использует `(backtick) в качестве escape-символа вместо обратной косой черты).

Вот команда в Powershell в моей системе:

& 'C:\Program Files\Git\mingw64\bin\curl' -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

Символ & является обязательным, поскольку путь к программе - строка в кавычках. Я должен был указать путь , потому что я не имею curl.exe в моем PATH Windows. Тем не менее, я мог бы просто избежать пробела в "Program Files":

C:\Program` Files\Git\mingw64\bin\curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

Одинарные и двойные кавычки в противном случае работают так, как вы их используете, при этом ' разграничение начала строки» и " появляются как буквальные символы внутри нее.

Обратите внимание , что вы должны указать путь к исполняемому файлу curl или по крайней мере указать curl.exe curl сам по себе является псевдонимом Powershell для командлета Invoke-WebRequest , который может выполнять большую часть функций программы cURL, но имеет совершенно другой синтаксис аргументов.

Кроме того, хотя вы можете вызывать Powershell из cmd с помощью powershell -c <command> , это действительно не поможет, поскольку в любом случае вам придется экранировать строку, используя глупый синтаксис cmd .


Другой вариант - просто использовать подсистему Windows для Linux (WSL), которая позволяет запускать программы для Linux (включая версии bash и curl Ubuntu по умолчанию) непосредственно в Windows, не требуя виртуальной машины или перезагрузки. Полную информацию об этом можно найти по адресу https://msdn.microsoft.com/en-us/commandline/wsl/about, но краткая версия - попробуйте запустить bash (или bash.exe) из любой командной строки или окна Powershell, и он установит подсистему Linux или, по крайней мере, расскажет вам, как.

1

Проблема в аргументе -d с двойными кавычками в качестве аргумента. Вы должны заключить его в кавычки и избежать двойных кавычек внутри.

Вы должны быть в состоянии сделать:

curl -i -X POST -H "Content-Type:application/json" -d "{  ^"firstName^" : ^"Frodo^",  ^"lastName^" : ^"Baggins^" }" http://localhost:8080/people

Лично я бы вставил их в файл, а затем использовал бы -d @filename для ясности.

0

Другой обходной путь в Windows - использовать bash от Cygwin. У меня была такая же проблема, с bash она у меня работает.

Для Windows 10 встроенная поддержка приложений Linux также может обрабатывать одинарные кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .