Подтвердить что ты не робот

Отправка json файлов в запросы curl с абсолютными или относительными путями

Просто интересно, как я могу отправить команду curl с параметром -d, определяющим файл с его путем, а не файл в текущем каталоге.

Это то, что я получаю, когда пытаюсь проверить свое приложение с помощью json файла в локальном каталоге. И приложение, и я счастливы:

curl -XPOST -H 'Content-Type:application/json' -d @all_fields.json http://testcomp.lab.net:8080/stats -v -s
* About to connect() to testcomp.lab.net port 8080
*   Trying 10.93.2.197... connected
* Connected to testcomp.lab.net (10.93.2.197) port 8080
> POST /stats HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: testcomp.lab.net:8080
> Accept: */*
> Content-Type:application/json
> Content-Length: 2882
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
HTTP/1.1 200 OK
< Content-Length: 0
* Connection #0 to host testcomp.lab.net left intact
* Closing connection #0

Это то, что я получаю, когда я указываю json файл, который находится в другом каталоге

curl -XPOST -H 'Content-Type:application/json' -d @json/all_fields.json http://testcomp.lab.net:8080/stats -v -s
"Invalid json for Java type interface java.util.List"
Warning: Couldn't read data from file "json/all_fields.json", this makes an 
Warning: empty POST.

<snip snip>
<snip snip>

< HTTP/1.1 400 Bad Request
< Content-Type: application/json
< Transfer-Encoding: chunked
* Connection #0 to host testcomp.lab.net left intact
* Closing connection #0

Я не видел ничего на странице man для curl для указания каталогов для файлов, переданных как данные. Я, к сожалению, ограничен файлами в локальном каталоге или есть специальный способ указать файлы в разных каталогах? Заранее благодарим за помощь.

4b9b3361

Ответ 1

Параметр -d @ принимает любой разрешаемый путь к файлу, если путь действительно существует. Таким образом, вы можете использовать:

  • путь к текущему каталогу
  • полный путь
  • путь с софт-ссылками в нем
  • и т.д.

То есть, как и сотни других команд стиля Nix. Однократное замечание: опция -d будет пытаться кодировать ваши данные, что из того, что вы описываете, на самом деле не является тем, что вы хотите. Вместо этого вы должны использовать опцию --data-binary. Что-то вроде этого:

curl -XPOST
     -H 'Content-Type:application/json'
     -H 'Accept: application/json'
     --data-binary @/full/path/to/test.json
     http://localhost:8080/easy/eservices/echo -v -s