Linux curl post xml

Отправка POST-запроса с помощью Curl

Curl — это популярный инструмент командной строки, который позволяет отправлять запросы на сервер, загружать файлы и отправлять веб-формы. Curl поддерживает более 25+ протоколов, включая HTTP, HTTPS, SFTP, FTP, а также имеет встроенную поддержку веб-форм, SSL, аутентификации пользователя и HTTP cookies. Curl работает в Linux, Windows и Mac.

Что такое метод запроса HTTP POST?

HTTP POST — это один из 9 распространенных методов запроса, поддерживаемых HTTP. Метод HTTP POST позволяет клиентам отправлять, а серверам получать и обрабатывать данные, содержащиеся в теле POST-сообщения. Отправка данных в теле сообщения POST необязательна; некоторые запросы POST могут не содержать содержимого в теле, например, запросы, которые хотят только обновить статус объекта в базе данных. Метод POST часто используется для отправки на сервер форм входа в систему и контактных форм, а также для загрузки файлов и изображений. Метод HTTP POST используется для операций CRUD для создания или обновления ресурса на сервере. POST-запросы могут изменять состояние сервера и не являются идемпотентными.

Как отправить POST-запрос с помощью Curl?

Вы можете отправить POST-запрос с помощью Curl, явно указав метод POST с помощью параметра командной строки -X POST или передав Curl данные с помощью параметра командной строки -d или —data. Если вы передаете данные с помощью параметра командной строки -d и не указываете явно метод HTTP с помощью параметра командной строки -X, Curl автоматически выберет метод HTTP POST для запроса.
Запрос POST в Curl
Выполнить

curl -X POST https://example.com/echo/post/json -H "Content-Type: multipart/form-data" -d '[post data]'

Синтаксис запроса POST в Curl

Ниже приведена команда Curl для создания POST-запроса с телом сообщения:
Curl POST-запрос с телом сообщения

curl -X POST -H "[тип содержимого]" -d "[post data]" [options] [URL]
  • -X: параметр указывает, какой метод запроса HTTP будет использоваться при взаимодействии с сервером
  • -H: заголовок content-type указывает тип данных в теле запроса
  • -d: параметр указывает данные, которые будут отправлены на сервер в теле POST-сообщения.

Параметр -X указывает, какой метод запроса HTTP будет использоваться при взаимодействии с сервером. Параметр -d определяет данные, которые будут отправлены на сервер в теле POST-сообщения. Заголовок content-type указывает тип данных в теле запроса.

Примеры запросов Curl POST

Ниже приведены примеры отправки запроса Curl POST с подробным описанием:

Читайте также:  What are pipes in linux

Отправка тела запроса с помощью Curl

Чтобы разместить данные в теле сообщения запроса с помощью Curl, необходимо использовать параметр командной строки -d или —data. Заголовок Content-Type определяет тип данных в теле сообщения. Сервер будет использовать этот заголовок для интерпретации и обработки полученных данных.

curl -X POST https://example.com/echo/post/json -H "Content-Type: application/json" -d ''

Отправка данных JSON с помощью Curl

Если вы хотите разместить JSON-данные с помощью Curl, вам необходимо установить Content-Type в application/json и использовать параметр -d для передачи JSON в Curl. Параметр командной строки -H «Content-Type: application/json» устанавливает тип содержимого JSON. Данные JSON передаются в виде строки.

curl -X POST https://example.com/echo/post/json -H 'Content-Type: application/json' -d ''

Отправка данных формы с помощью Curl

Если вы хотите отправить данные формы с помощью Curl, вы можете использовать параметры командной строки -F (—form) или -d (—data). При использовании параметра -F данные формы отправляются в формате «multipart/form-data», а при использовании параметра -d данные формы отправляются в формате «application/x-www-form-urlencoded».

curl -X POST https://example.com/echo/post/form -H "Content-Type: application/x-www-form-urlencoded" -d "key1=value1&key2=value2"

Отправка файла с помощью Curl

Если вы хотите отправить файл с помощью Curl, добавьте параметры командной строки -d и -F и начните данные с символа @. После символа @ необходимо указать путь к файлу. По умолчанию Curl предоставляет заголовок Content-Type на основе расширения файла, но вы можете предоставить пользовательский заголовок Content-Type с помощью опции командной строки -H.

curl -d @data.json https://example.com/echo/post/json

Отправка XML с помощью Curl

Чтобы отправить данные XML на сервер с помощью Curl, вы можете передать XML с помощью опции командной строки -d и указать тип данных в теле сообщения с помощью опции -H Content-Type: application/xml.

curl -X POST https://example.com/echo/post/xml -H "Content-Type: application/xml" -d "1Ivan"

Отправка учетных данных базовой аутентификации с помощью POST-запроса Curl

Вы можете передать учетные данные базовой аутентификации в Curl, используя параметр командной строки —user=»login: password». Curl автоматически шифрует учетные данные пользователя в строку в кодировке base64 и передает их на сервер с помощью заголовка Authorization: Basic [token] header.
Пример запроса базовой аутентификации Curl Post
Запустите

curl -X POST https://example.com/echo/post/json --user "login:password"

Источник

Send request to cURL with post data sourced from a file

I need to make a POST request via cURL from the command line. Data for this request is located in a file. I know that via PUT this could be done with the —upload-file option.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file" 

Sorry maybe i mistakenly described my problem i need to send request not via php-curl but just via curl command from command line from linux os.

6 Answers 6

You’re looking for the —data-binary argument:

curl -i -X POST host:port/post-file \ -H "Content-Type: text/xml" \ --data-binary "@path/to/file" 

In the example above, -i prints out all the headers so that you can see what’s going on, and -X POST makes it explicit that this is a post. Both of these can be safely omitted without changing the behaviour on the wire. The path to the file needs to be preceded by an @ symbol, so curl knows to read from a file.

Читайте также:  Kali linux which kernel

For those that can’t get it to work, make sure that you are specifying the content type in your headers!

If you’re executing the curl command from the same path as your data file, its just —data-binary «@file» .

I need to make a POST request via Curl from the command line. Data for this request is located in a file.

All you need to do is have the —data argument start with a @ :

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path 

For example, if you have the data in a file called stuff.xml then you would do something like:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path 

The stuff.xml filename can be replaced with a relative or full path to the file: @../xml/stuff.xml , @/var/tmp/stuff.xml , .

If you are using form data to upload file,in which a parameter name must be specified , you can use:

curl -X POST -i -F «parametername=@filename» -F «additional_parm=param2» host:port/xxx

Most of answers are perfect here, but when I landed here for my particular problem, I have to upload binary file (XLSX spread sheet) using POST method, I see one thing missing, i.e. usually its not just file you load, you may have more form data elements, like comment to file or tags to file etc as was my case. Hence, I would like to add it here as it was my use case, so that it could help others.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url 

I was having a similar issue in passing the file as a param. Using -F allowed the file to be passed as form data, but the content type of the file was application/octet-stream. My endpoint was expecting text/csv.

You are able to set the MIME type of the file with the following syntax:

So the full cURL command would look like this for a CSV file:

curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com 

Источник

How do I POST XML data with curl

I want to post XML data with cURL. I don’t care about forms like said in How do I make a post request with curl. I want to post XML content to some webservice using cURL command line interface. Something like:

WebRequest req = HttpWebRequest.Create("http://myapiurl.com/service.svc/"); req.Method = "POST"; req.ContentType = "text/xml"; using(Stream s = req.GetRequestStream()) < using (StreamWriter sw = new StreamWriter(s)) sw.Write(myXMLcontent); >using (Stream s = req.GetResponse().GetResponseStream())

What do you mean «it can’t be processed by the service»? Is the service receiving it correctly? Is it being posted correctly? What does the service receive from your request?

The service doesn’t recognize the request. I receive an internal error page. When using my C# example this doesn’t happen. The posted data is the same.

Читайте также:  Install git for linux

My hunch is the data comes in «escaped» to the web service (like %3C%3Fxml+version=%221.0%22+encoding%3D%22UTF-8% ) that’s what I ran into in java anyway.

5 Answers 5

-H «text/xml» isn’t a valid header. You need to provide the full header:

I prefer the following command-line options:

cat req.xml | curl -X POST -H 'Content-type: text/xml' -d @- http://www.example.com 
curl -X POST -H 'Content-type: text/xml' -d @req.xml http://www.example.com 
curl -X POST -H 'Content-type: text/xml' -d 'data' http://www.example.com 

It is simpler to use a file ( req.xml in my case) with content you want to send — like this:

curl -H «Content-Type: text/xml» -d @req.xml -X POST http://localhost/asdf

You should consider using type ‘application/xml’, too (differences explained here)

Alternatively, without needing making curl actually read the file, you can use cat to spit the file into the stdout and make curl to read from stdout like this:

cat req.xml | curl -H «Content-Type: text/xml» -d @- -X POST http://localhost/asdf

Both examples should produce identical service output.

Источник

POST XML file using cURL command line

How can I POST an XML file to a local server http://localhost:8080 using cURL from the command line? What command should I use?

9 Answers 9

If that question is connected to your other Hudson questions use the command they provide. This way with XML from the command line:

$ curl -X POST -d '. ' \ http://user:pass@myhost:myport/path/of/url 

You need to change it a little bit to read from a file:

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url 

Read the manpage. following an abstract for -d Parameter.

-d/—data

(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F/—form.

-d/—data is the same as —data-ascii. To post data purely binary, you should instead use the —data-binary option. To URL-encode the value of a form field you may use —data-urlencode.

If any of these options is used more than once on the same command line, the data pieces specified will be merged together with a separating &-symbol. Thus, using ‘-d name=daniel -d skill=lousy’ would generate a post chunk that looks like ‘name=daniel&skill=lousy’.

If you start the data with the letter @, the rest should be a file name to read the data from, or — if you want curl to read the data from stdin. The contents of the file must already be URL-encoded. Multiple files can also be specified. Posting data from a file named ‘foobar’ would thus be done with —data @foobar.

Источник

Оцените статью
Adblock
detector