Отправка POST-запроса на API REST | Руководство по REST API

Используйте POST-запрос HTTP для отправки одного или нескольких запросов RPC на REST API. Для настройки устройства можно использовать POST-запрос.

Для одной rpc команды общий формат оконечных точек:

scheme://device-name:port/rpc/method[@attributes]/params

  • scheme: http или https

  • method: Имя любой rpc Junos OS. Имя method идентично элементу tag. Дополнительные сведения см. в Junos протоколе XML, обработке инструкций и тегов ответа в руководстве по разработчику протокола управления XML Junos xML и справочнике разработчика Junos XML API.

  • params: Необязательные значения параметров name[=value] ().

Для аутентификации запроса отправьте имя пользователя и пароль, закодированный базой 64, в задатке авторизации:

curl -u "username:password" http://device-name:port/rpc/get-interface-information

Чтобы указать данные в качестве строки запроса в URI для POST-запросов, отправьте данные запроса rpc на теле POST. В таких случаях можно указать Content-Type как или , как text/plain application/xml показано в этих эквивалентных вызовах cURL:

curl -u "username:password" http://device-name:port/rpc/get-interface-information --header "Content-Type: text/plain" –d "interface-name=cbp0"
curl -u "username:password" http://device-name:port/rpc/get-interface-information --header "Content-Type: application/xml" –d "<interface-name>cbp0</interface-name>"

Для одиночных и нескольких команд RPC можно использовать заглавныедеры HTTP Accept для указания формата возврата, используя одно из следующих значений типа содержимого:

Например, следующий вызов cURL определяет формат вывода JSON:

curl -u "username:password" http://device-name:port/rpc -d <get-software-information /> –header "Accept: application/json"

Можно также указать формат вывода с использованием дополнительного format атрибута:

curl -u "username:password" http://device-name:port/rpc -d "<get-software-information  format=application/json'/>"

Примечание.

По умолчанию для POST-запросов, содержащих аргументы в теле, по умолчанию задается application/xml. Если необходимо использовать любое другое содержимое, например строку запроса, можно указать тип содержимого ( текст/неявный). Укажите format атрибут в командах настройки.

При выполнении нескольких команд в одном запросе rpc общий формат конечной точки:

scheme://device-name:port/rpc

RPC должны быть предоставлены в качестве XML-данных в теле POST. Тип содержимого для ответа является многопартийным/смешанным, при этом граница и подтип связаны с выходными данными каждого выполнения RPC. Формат, указанный в заглавном сообщении «Accept», используется в качестве формата выходных данных для каждого из RPC при утере

format атрибута. Если в RPC не указан задавитель Accept и в указанном RPC не указан ни один атрибут, формат вывода по умолчанию format — XML. Например, отправить один HTTP-запрос для выполнения RPC и get-software-information get-interface-information отправить POST-запрос /rpc с "Auth: Basic <base64hash>" .
"Content-Type: application/xml"
Тело POST будет содержать:

<get-software-information/><get-interface-information/>

Ниже находится вызов cURL с использованием этого тела POST:

curl -u "username:password" http://device-name:port/rpc -d "<get-software-information/><get-interface-information/>"

Выходные данные запроса, содержащие XML в качестве стандартного, будут отображаться следующим образом:

HTTP/1.1 200 OK
Content-Type: multipart/mixed; boundary=fkj49sn38dcn3
Transfer-Encoding: chunked
Date: Thu, 20 Mar 2014 11:01:27 GMT
Server: lighttpd/1.4.32
--fkj49sn38dcn3
Content-Type: application/xml
<software-information>
<host-name>...</host-name>
...
</software-information>
--fkj49sn38dcn3
Content-Type: application/xml
<interface-information>
<physical-interface>...</physical-interface>
</interface-information>
--fkj49sn38dcn3--

Также можно указать формат выходных данных для каждого элемента в теле POST. Например, следующий запрос излучает JSON для RPC и обычный текст get-interface-information для get-software-information RPC:

curl -u "username:password" http://device-name:port/rpc 
-d "<get-interface-information/><get-software-information format='text/plain'/>" 
—header "Accept: application/json"

При выполнении нескольких RPC в случае возникновения ошибки по умолчанию игнорируется ошибка и продолжается выполнение. Если необходимо выйти из URI при первой ошибке, stop-on-error укажите флаг в URI. Например, при столкновении с ошибкой устройство настраивается и завершается следующим запросом:

curl -u "username:password" http://device-name:port/rpc?stop-on-error=1 
-d "<lock-configuration/>
  <load-configuration>
    <configuration><system><hostname>foo</hostname></system></configuration>
  </load-configuration>
  <commit/>
   <unlock-configuration/>" 

Как вручную отправлять HTTP-запросы POST из браузера Firefox или Chrome?

Как вручную отправлять HTTP-запросы POST из браузера Firefox или Chrome?

Я хочу протестировать некоторые URL-адреса в веб-приложении, над которым я работаю. Для этого я хотел бы вручную создавать запросы HTTP POST (то есть я могу добавлять любые параметры, которые мне нравятся).

Есть ли какие-либо расширения или функции в Chrome и / или Firefox, которые мне не хватает?

ajax  google-chrome  firefox  http-post 

— Паскаль Кляйн

источник






Ответы:


Я делал приложение для Chrome под названием Postman для такого рода вещей. Все остальные расширения выглядели немного устаревшими, поэтому я сделал их самостоятельно. Он также имеет множество других функций, которые были полезны для документирования нашего собственного API здесь.


Почтальон теперь также имеет собственные приложения (то есть автономные) для Windows, Mac и Linux! Сейчас предпочтительнее использовать нативные приложения, читайте больше здесь .

— Abhinav
источник







CURL УДИВИТЕЛЬНО делать то, что вы хотите! Это простой, но эффективный инструмент командной строки.

Остальные реализации тестовых команд:

curl -i -X GET http://rest-api.io/items
curl -i -X GET http://rest-api.io/items/5069b47aa892630aae059584
curl -i -X DELETE http://rest-api.io/items/5069b47aa892630aae059584
curl -i -X POST -H 'Content-Type: application/json' -d '{"name": "New item", "year": "2009"}' http://rest-api.io/items
curl -i -X PUT -H 'Content-Type: application/json' -d '{"name": "Updated item", "year": "2010"}' http://rest-api.io/items/5069b47aa892630aae059584

— Арно 2501
источник





Fire Fox

Откройте панель «Сеть» в «Инструментах разработчика», нажав Ctrl+Shift+Eили, выбрав Menubar -> Инструменты -> Веб-разработчик -> Сеть. Затем нажмите на маленький значок двери в правом верхнем углу (в развернутом виде на скриншоте вы найдете его слева от выделенных заголовков), второй ряд (если вы его не видите, перезагрузите страницу) -> Изменить и повторно отправить любой запрос, который вы хотите

— 0fnt
источник






Забудьте браузер и попробуйте CLI. HTTPie — отличный инструмент!

Клиенты CLI http:

  • HTTPie
  • HTTP Prompt
  • Curl
  • Wget

Если вы настаиваете на расширении браузера, то:

Хром :

  • Почтальон — REST Client (лучший клиент браузера)
  • Расширенный клиент REST
  • Рестлет Клиент

Firefox :

  • REST Easy (имеет приятный дизайн)
  • RESTClient
  • Плакатный плагин

— Амра
источник







Будучи очень вдохновленным Postman для Chrome , я решил написать нечто подобное для Firefox.

REST Easy * — это перезапускаемое дополнение Firefox, целью которого является максимально возможный контроль над запросами. Надстройка все еще находится в экспериментальном состоянии (она еще даже не проверялась Mozilla), но разработка идет неплохо.

Проект с открытым исходным кодом, так что если кто-то чувствует себя обязанным помочь с разработкой, это было бы здорово: https://github.com/nathan-osman/Rest-Easy

* надстройка, доступная на http://addons.mozilla.org , всегда будет немного отставать от кода, доступного на GitHub

— Натан Осман
источник







Вы специально задали вопрос о «расширении или функциональности в Chrome и / или Firefox», которые дают ответы, которые вы уже получили, но мне нравится простота ответа oezi на закрытый вопрос «как отправить запрос на публикацию с помощью веб-браузера» для простых параметров. Оэзи говорит:

с формой, просто установите methodдля"post"

<form action="blah.php" method="post">
  <input type="text" name="data" value="mydata" />
  <input type="submit" />
</form>

Т.е. создайте себе очень простую страницу, чтобы проверить действия поста.

— dumbledad
источник


Это немного некрасиво, но есть Simple REST Client расширение для Chrome.

Это прекрасно работает для меня — помните, что вы все еще можете использовать отладчик с ним. Панель «Сеть» особенно полезна; это даст вам отрендеренные объекты JSON и страницы ошибок.

— Nate
источник





Для Firefox есть также расширение под названием RESTClient, которое довольно приятно:

https://addons. mozilla.org/en-US/firefox/addon/restclient

— Йохан Фальк
источник


Может не иметь прямого отношения к браузерам, но Fiddler — еще одно хорошее программное обеспечение.

— Vineel Kovvuri
источник


Вы также можете использовать Watir или Watin для автоматизации браузеров. Watir написан для ruby, а Watin для .Net языков. Не уверен, что это то, что вы ищете.

  • http://watin.sourceforge.net/
  • http://watir.com/

— Церера
источник


Попробуйте Runscope. Бесплатный инструмент для ознакомления с их услугами предоставляется по адресу https://www.hurl.it/ . Вы можете установить метод, аутентификацию, заголовки, параметры и тело. Ответ показывает код состояния, заголовки и тело. Тело ответа может быть отформатировано из JSON со складной иерархией. Платные учетные записи могут автоматизировать тестовые вызовы API и использовать возвращаемые данные для создания новых тестовых вызовов. Раскрытие COI: я не имею отношения к Runscope.

— Беннет Браун
источник



Проверьте http-toolна Firefox ..

https://addons.mozilla.org/en-US/firefox/addon/http-tool/

Aimed at web developers who need to debug HTTP requests and responses.
Can be extremely useful while developing REST based api.
Features:
* GET
* HEAD
* POST
* PUT
* DELETE
Add header(s) to request. 
Add body content to request.
View header(s) in response.
View body content in response.
View status code of response.
View status text of response.

— bobbyrne01
источник


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.

Licensed under cc by-sa 3.0 with attribution required.

Тестирование POST-запросов

Тестирование POST-запросов
21.12.2018 14:56

Автор: Кристин Джеквони (Kristin Jackvony)

Оригинал статьи: http://thethinkingtester.blogspot.ru/2018/03/testing-post-requests. html

Перевод: Ольга Алифанова.

Сегодня мы рассмотрим POST-запросы. Они, пожалуй, наиболее важные из всех REST-запросов, потому что добавляют новые записи в базу данных приложения. Очень важно как следует их протестировать, потому что они напрямую влияют на качество данных вашей базы.

Чтобы разобраться с POST-запросами, мы снова обратимся к Swagger Pet Store и Postman. Перейдите в Pet Store (http://petstore.swagger.io) и кликните на первом POST-запросе к «/pet». Этот POST-запрос добавит питомца в магазин. Посмотрите на Example Value (примеры значений):


Это тело POST-запроса. В отличие от GET-запросов, у которых обычно нет тела, в POST вы, как правило, найдете json или xml. Тело запроса – это данные, которые вы добавляете в базу данных. Кликните по ссылке Model:


Это окно вкратце описывает, что за значения используются в теле запроса. Вы можете нажимать на иконки «>», чтобы раскрыть каждую секцию модели. С моей точки зрения, она расплывчато описывает, что такое категория и тэги, поэтому мне придется поиграть в угадайку. Давайте пройдемся по каждой секции модели Pet:

  • id: это id питомца, который можно использовать в GET-запросах, которые мы уже рассматривали.
  • category: описывает, к какому виду принадлежит питомец. Id – уникальный идентификатор категории, а name – слово, описывающее животное.
  • name: имя питомца.
  • photoUrls: строки-ссылки на изображения питомца.
  • tags: описания, которые можно добавить к питомцу. Id – уникальный идентификатор тэга, а name – слово, описывающее питомца.
  • status: статус питомца в магазине. Может быть available (доступен), pending (забронирован) или sold (продан).

Мы можем использовать информацию в модели, чтобы создать POST-запрос на добавление нового питомца. Нажмите на «Try it out» и замените тело запроса следующей информацией:

{
  "id": 102,
  "category": {
    "id": 1,
    "name": "cat"
  },
  "name": "Grumpy Cat",
  "photoUrls": [
    "https://pbs.twimg.com/profile_images/948294484596375552/RyGNqDEM_400x400.jpg"
  ],
  "tags": [
    {
      "id": 1,
      "name": "blue eyes"
    }
  ],
  "status": "sold"
}

Перед тем, как нажать на Execute, обратите внимание, что кое-что в этом POST-запросе отличается от того, с чем вы столкнетесь в ваших приложениях. Обычно при публикации объекта с id, который уже существует в базе данных, вы получите сообщение, что запись уже имеется. В случае Pet Store, если id уже есть, запись будет перезаписана данными, отправленными вами.

Теперь нажимаем на «Execute». Взгляните, что вернулось в теле ответа. Вы должны увидеть данные, которые вы добавили. Они могут отличаться порядком от тела запроса, но это не важно.

Давайте убедимся, что новый питомец действительно добавлен! Вернитесь к запросу GET pet/{petId}, откройте его и нажмите «Try it out». Введите 100 в поле ID, и нажмите на «Execute». Вы должны увидеть добавленного вами питомца в теле ответа.

Мы успешно создали запрос в Swagger, теперь давайте попробуем прогнать его в Postman. Откройте приложение и нажмите на кнопку с плюсиком «+» для создания нового запроса. Щелкните по иконке выпадающего списка рядом со словом GET, и выберите POST. Введите URL запроса: http://petstore.swagger.io/v2/pet. Нажмите на вкладку «Body» под URL и выберите опцию «Raw». В секции тела запроса ниже вставьте запрос, который мы ранее использовали в Swagger. Возможно, вам захочется его слегка изменить, поменяв id или имя питомца.

Перед тем, как отправить этот запрос через Postman, нам нужно выполнить еще одно действие – добавить заголовок. Заголовки используются в HTTP-запросах и ответах для передачи дополнительной информации серверу. В этом случае нам нужно сказать серверу, какого типа содержимого ему ожидать. Кликните на вкладке «Header» под URL, и в поле под «Key» введите «Content-Type». В поле под «Value» введите «application/json». Таким образом мы сообщаем серверу, что ему нужно искать тело запроса в json-формате. Теперь нажмите на кнопку «Send». В нижней половине окна Postman вы должны увидеть код ответа 200 и тело ответа, совпадающее с добавленными вами данными. Теперь вы можете использовать GET-запрос, чтобы убедиться, что ваш питомец добавлен.

Мы уже обсуждали тестирование форм, и тут то же самое – POST-запросы можно тестировать массой различных сценариев. Во-первых, нам надо протестировать сценарии «счастливого пути». Попробуйте отправить POST-запросы, варьируя id, категорию питомца и ее id, имя питомца, ссылки на фото, тэги и их id, и статусы питомца. Вам нужно протестировать все три статуса: sold, available и pending. Также стоит обратить внимание, что можно передавать несколько ссылок на фото, и несколько тэгов. Вот пример тела POST-запроса, где передаются три фотографии и два тэга:

{
  "id": 102,
  "category": {
    "id": 2,
    "name": "dog"
  },
  "name": "Snoopy",
  "photoUrls": [
    "https://schulzmuseum.org/wp-content/uploads/2017/06/920608_FlyingAce-200.jpg",
    "https://www.calmuseums.org/images/snoopy/snoopy.png",
    "https://vignette.wikia.nocookie.net/peanuts/images/2/28/AmigosperdemoSono.png/revision/latest?cb=20110823202539"
  ],
  "tags": [
    {
      "id": 2,
      "name": "beagle"
    },
    {
      "id": 3,
      "name": "flying ace"
    }
  ],
  "status": "available"
}

Теперь, когда вы протестировали ряд успешных сценариев, время задуматься о том, как можно сломать наш запрос. Во-первых, вы могли заметить по модели в Swagger, что обязательными будут только два поля: имя питомца и ссылка на фото. Что будет, если передавать только эти поля?

{
  "name": "Snoopy",
  "photoUrls": [
    "https://schulzmuseum. ? Вы можете тестировать эти значения на всех ID: питомца, категории и тэга. Насколько длинными могут быть строки? А насколько короткими? Есть ли недопустимые символы? Стоит протестировать верхние и нижние границы строк и убедиться, что запрещенные символы не принимаются сервером. Это также неплохая возможность проверить на SQL-инъекции и внедрение сценариев. К примеру, можно попробовать передать что-то вроде:

<script>alert('XSS')</script>

или

' or 1 = 1--

и посмотреть, разрешено ли это. В случае с PetStore это, скорее всего, разрешается, но реальное приложение должно запрещать такой ввод или как минимум делать его неэффективным.

Еще стоит задуматься о тестировании списка значений статуса питомца. Статус может быть одним из трех: available, pending, sold. Что произойдет, если вы передадите в статусе другое слово, число, символ? Что будет, если вы передадите статус в верхнем регистре, или если некоторые буквы будут записаны в нем? POST-запросы, как правило, нечувствительны к регистру. Стоит также проверить URL фотографии и убедиться, что в нем нельзя передать вредоносные скрипты, а также то, что не является URL.

Закончив тестировать тело запроса, переходите к заголовкам. Этому конкретному POST-запросу требуется заголовок Content-Type, позволяющий или application/json, или application/xml значение. Если заголовок отсутствует, вы получите 415 ошибку. При использовании application/xml значения вы получите ошибку 400, если только не измените тело запроса на XML-формат. Вы также можете протестировать отправку xml-тела с заголовком application/json.

И, наконец, можно протестировать URL самого запроса и его тип. Что будет, если вы сделаете запрос через https? А если измените POST на GET?

Если вкратце, есть множество способов тестирования POST-запросов, множество из которых недоступны через интерфейс. В дополнение к тестированию обязательных и необязательных полей и их валидации, вы можете также манипулировать переданным в базу объектом, заголовками, и URL запроса.

Больше информации по этой теме вы можете получить в курсе Тестирование REST API

Предыдущие статьи на эту тему

Введение в REST-запросы и тестирование GET-запросов

Обсудить в форуме

urllib - Как отправить запрос POST?

Спросил

Изменено 1 месяц назад

Просмотрено 825k раз

Я нашел этот скрипт онлайн:

 import httplib, urllib
params = urllib.urlencode({'номер': 12524, 'тип': 'проблема', 'действие': 'показать'})
заголовки = {"Content-type": "application/x-www-form-urlencoded",
            "Принять": "текст/обычный"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", параметры, заголовки)
ответ = conn.getresponse()
вывести response.status, response.reason
302 найдено
данные = ответ.чтение()
данные
'Перенаправление на  python.org/issue12524">http://bugs.python.org/issue12524'
соединение.закрыть()
 

Но я не понимаю, как использовать его с PHP или что такое все внутри переменной params или как ее использовать. Могу ли я немного помочь с попыткой заставить это работать?

  • urllib
  • python-2.x
  • httplib

5

Если вы действительно хотите работать с HTTP с помощью Python, я настоятельно рекомендую Requests: HTTP for Humans. Быстрый запуск POST, адаптированный к вашему вопросу:

 >>> запросы на импорт
>>> r = request.post("http://bugs.python.org", data={'number': '12524', 'type': 'issue', 'action': 'show'})
>>> print(r.status_code, r.reason)
200 ОК
>>> print(r.text[:300] + '...')


<голова>
<название>
Ошибка 12524: пример изменения httplib docs POST — трекер Python

 ..
>>>
 

7

Это решение без каких-либо внешних pip-зависимостей, но работает только в Python 3+ (Python 2 не будет работать):

 из urllib.parse import urlencode
из запроса импорта urllib.request, urlopen
url = 'https://httpbin.org/post' # Установите целевой URL здесь
post_fields = {'foo': 'bar'} # Установите поля POST здесь
запрос = Запрос (url, urlencode (post_fields).encode())
json = urlopen(запрос).read().decode()
печать (json)
 

Пример вывода:

 {
  "аргументы": {},
  "данные": "",
  "файлы": {},
  "форма": {
    "фу": "бар"
  },
  "заголовки": {
    "Accept-Encoding": "личность",
    "Длина содержания": "7",
    "Content-Type": "application/x-www-form-urlencoded",
    «Хост»: «httpbin.org»,
    «Агент пользователя»: «Python-urllib/3.3»
  },
  "json": ноль,
  "происхождение": "127.0.0.1",
  "url": "https://httpbin.org/post"
}
 

0

Вы не можете выполнять запросы POST, используя urllib (только для GET), вместо этого попробуйте использовать модуль запросов , например:

Пример 1. 0:

 запросы на импорт
base_url="www.server.com"
final_url="/{0}/friendly/{1}/url".format(base_url,любое_значение_здесь)
полезная нагрузка = {'число': 2, 'значение': 1}
ответ = запросы.сообщение (final_url, данные = полезная нагрузка)
печать(ответ.текст) #ТЕКСТ/HTML
print(response.status_code, response.reason) #HTTP
 

Пример 1.2:

 >>> запросы на импорт
>>> полезная нагрузка = {'key1': 'value1', 'key2': 'value2'}
>>> r = request.post("http://httpbin.org/post", data=payload)
>>> печать (р.текст)
{
  ...
  "форма": {
    "ключ2": "значение2",
    "ключ1": "значение1"
  },
  ...
}
 

Пример 1.3:

 >>> импорт json
>>> url = 'https://api.github.com/some/endpoint'
>>> полезная нагрузка = {'некоторые': 'данные'}
>>> r = request.post(url, data=json.dumps(полезная нагрузка))
 

1

Используйте библиотеку запросов для GET, POST, PUT или DELETE, нажав конечную точку REST API. Передайте оставшийся URL-адрес конечной точки API в url , полезную нагрузку (dict) в data и заголовок/метаданные в заголовках

 запросов на импорт, json
URL-адрес = "bugs.python.org"
полезная нагрузка = {"число": 12524,
           "тип": "выпуск",
           "действие": "показать"}
header = {"Content-type": "application/x-www-form-urlencoded",
          "Принять": "текст/обычный"}
response_decoded_json = request.post (url, данные = полезная нагрузка, заголовки = заголовок)
response_json = response_decoded_json.json()
 
печать (ответ_json)
 

3

Ваш словарь данных содержит имена полей ввода формы, вы просто держите их значения, чтобы найти результаты. представление формы Заголовок настраивает браузер для получения типа данных, которые вы объявляете. С библиотекой запросов легко отправить POST:

 запросы на импорт
URL-адрес = "https://bugs.python.org"
data = {'@number': 12524, '@type': 'issue', '@action': 'show'}
заголовки = {"Content-type": "application/x-www-form-urlencoded", "Accept":"text/plain"}
ответ = запросы.  сообщение (url, данные = данные, заголовки = заголовки)
печать (ответ.текст)
 

Подробнее об объекте запроса: https://requests.readthedocs.io/en/master/api/

Если вы не хотите использовать модуль, который вы должны установить, например , запросы , и ваш вариант использования очень базовый, то вы можете использовать urllib2

 urllib2.urlopen(url, тело)
 

См. документацию для urllib2 здесь: https://docs.python.org/2/library/urllib2.html.

Вы можете использовать библиотеку запросов, чтобы сделать почтовый запрос. Если у вас есть строка JSON в полезной нагрузке, вы можете использовать json.dumps(payload), которая является ожидаемой формой полезной нагрузки.

    импортировать запросы, json
    URL-адрес = "http://bugs.python.org/test"
    полезная нагрузка={
        «данные1»: 1234, «данные2»: «тест»
    }
    заголовки = {
        «Тип контента»: «приложение/json»
    }
    ответ = запросы. сообщение (url, заголовки = заголовки, данные = json. dumps (полезная нагрузка))
    печать (ответ.текст, ответ.status_code)
 

Твой ответ

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как параметры отправляются в запросе HTTP POST?

Краткий ответ: в запросах POST значения отправляются в «теле» запроса. С веб-формами они, скорее всего, отправляются с типом носителя application/x-www-form-urlencoded 9.0044 или multipart/form-data . Языки программирования или фреймворки, которые были разработаны для обработки веб-запросов, обычно делают с такими запросами "Правильно" и предоставляют вам легкий доступ к легко декодируемым значениям (например, $_REQUEST или $_POST в PHP, или cgi.FieldStorage() , flask.request.form на Python).


Теперь давайте немного отвлечемся, что может помочь понять разницу 😉

Разница между 9Запросы 0043 GET и POST в значительной степени семантические. Они также «используются» по-разному, что объясняет разницу в том, как передаются значения.

При выполнении запроса GET вы запрашиваете у сервера один или набор объектов. Чтобы позволить клиенту фильтровать результат, он может использовать так называемую «строку запроса» URL-адреса. Строка запроса — это часть после ? . Это часть синтаксиса URI.

Итак, с точки зрения кода вашего приложения (часть, которая получает запрос), вам нужно будет проверить часть запроса URI, чтобы получить доступ к этим значениям.

Обратите внимание, что ключи и значения являются частью URI. Браузеры могут налагать ограничение на длину URI. Стандарт HTTP гласит, что ограничений нет. Но на момент написания этой статьи большинство браузеров ограничивают URI (у меня нет конкретных значений). Запросы GET должны никогда не использоваться для отправки новой информации на сервер. Особенно не большие документы. Вот где вы должны использовать POST или PUT .

При выполнении запроса POST клиент фактически отправляет новый документ на удаленный хост. Таким образом, строка запроса не имеет (семантического) смысла. Вот почему у вас нет доступа к ним в коде вашего приложения.

POST немного сложнее (и способ более гибкий):

При получении запроса POST вы всегда должны ожидать «полезную нагрузку» или, в терминах HTTP: тело сообщения. Тело сообщения само по себе довольно бесполезно, так как нет стандартный формат (насколько я могу судить. Может быть, application/octet-stream?). Формат тела определяется заголовком Content-Type . При использовании элемента HTML FORM с method="POST" это обычно application/x-www-form-urlencoded . Другим очень распространенным типом является multipart/form-data, если вы используете загрузку файлов. Но это может быть что угодно , от text/plain , до application/json или даже пользовательский приложение/октет-поток .

В любом случае, если запрос POST сделан с Content-Type , который не может быть обработан приложением, он должен вернуть код состояния 415 .

Большинство языков программирования (и/или веб-фреймворков) предлагают способ декодирования тела сообщения из/в наиболее распространенные типы (например, application/x-www-form-urlencoded , multipart/form-data или application/json ). Так что это легко. Пользовательские типы потенциально требуют немного больше работы.

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

  1. Считать поле Content-Type
  2. Если значение не является одним из поддерживаемых медиа-типов, верните ответ с кодом состояния 415
  3. , в противном случае декодируйте значения из тела сообщения.

Опять же, такие языки, как PHP, или веб-фреймворки для других популярных языков, вероятно, справятся с этим за вас. Исключением является 415 ошибка. Ни один фреймворк не может предсказать, какие типы контента ваше приложение будет поддерживать и/или не поддерживать. Это зависит от вас.

Запрос PUT обрабатывается точно так же, как запрос POST . Большая разница в том, что запрос POST должен позволить серверу решить, как (и если вообще) создать новый ресурс. Исторически (из устаревшего RFC2616 нужно было создать новый ресурс как «подчиненный» (дочерний) URI, на который был отправлен запрос).

Запрос PUT , напротив, должен «депонировать» ресурс точно по адресу этого URI, а с ровно по этому контенту. Ни больше ни меньше. Идея состоит в том, что клиент отвечает за создание полного ресурса перед его «ПОСТАВКОЙ». Сервер должен принять его как есть по данному URL-адресу.

Как следствие, запрос POST обычно не используется для замены существующего ресурса. А Запрос PUT может выполнять как создание , так и замену .

Существуют также «параметры пути», которые можно использовать для отправки дополнительных данных на удаленный компьютер, но они настолько необычны, что я не буду вдаваться в подробности. Но, для справки, вот выдержка из RFC:

Помимо точечных сегментов в иерархических путях, сегмент пути считается непрозрачный по общему синтаксису. Приложения, создающие URI, часто используют зарезервированные символы, разрешенные в сегменте для разграничения конкретных схем или подкомпоненты, специфичные для обработчика разыменования. Например, точка с запятой (";") и равно ("=") зарезервированные символы часто используются для разделения параметров и значения параметров, применимые к этому сегменту. Запятая (",") зарезервирована характер часто используется для аналогичных целей. Например, один производитель URI может использовать такой сегмент, как "name;v=1.1", чтобы указать ссылку на версию 1.1 «имя», тогда как другой может использовать такой сегмент, как «имя, 1.1», чтобы указать то же самое. Типы параметров могут быть определены специфичными для схемы семантика, но в большинстве случаев синтаксис параметра специфичен к реализации алгоритма разыменования URI.

Как сделать POST-запрос в Postman

POST-запрос с помощью Postman

В предыдущих руководствах мы узнали, как отправить запрос GET , а также узнали о параметрах запроса . Из наших основ Rest мы уже знаем, что такое HTTP-запрос и HTTP-ответ . Если вы еще не читали эти два руководства, сделайте это, прежде чем продолжить. В этой главе мы сосредоточимся на другом типе метода запроса — 9.0156 POST-запрос у почтальона .

Что такое POST-запрос?

A POST — это HTTP-команда , аналогичная запросу GET , это указывает, что клиент отправляет данные на заданную конечную точку . Запрос POST — это метод, который используется, когда нам нужно отправить некоторую дополнительную информацию внутри тела запроса на сервер. Когда мы отправляем POST-запрос, мы, как правило, намереваемся внести некоторые изменения на сервер, например, обновление, удаление или добавление . Одним из классических примеров POST-запроса является страница входа. Когда вы впервые подписываетесь на что-либо, скажем, на Facebook, вы отправляете на сервер свою личную информацию, такую ​​как пароль. Сервер создает новую учетную запись с теми же данными, и эта учетная запись постоянно добавляется на сервер Facebook. Вы только что создали новый ресурс на сервере. Запросы POST очень популярны и в основном используются всякий раз, когда вы отправляете конфиденциальную информацию, такую ​​как отправка формы или отправка конфиденциальной информации на сервер.

В этом уроке мы рассмотрим различные функции POST Запросы и то, как мы можем создать их в Postman. Прежде чем мы попытаемся использовать пример, чтобы получить четкое представление о POST Request .

POST-запрос у почтальона

Каждая конечная точка REST имеет свою собственную команду HTTP , связанную с ней. Если конечная точка указывает, что ее следует вызывать с помощью команды HTTP POST, то клиенты обязаны вызывать конечную точку с Только глагол POST HTTP . Давайте сначала проверим, что происходит, когда мы запрашиваем метод GET вместо метода POST для конечной точки POST . Также проверить, что происходит, когда мы делаем POST Request без Body .

Запрос GET на конечной точке POST
  1. Используйте API  http://restapi.demoqa.com/customer/register ( Этот API используется для регистрации нового клиента) в панели конечной точки Postman и нажмите Отправить . Убедитесь, что в раскрывающемся списке Тип метода выбрано значение GET .

  1. См. код состояния HTTP, это будет 405 Метод не разрешен.  Это означает, что мы обращаемся к конечной точке с неправильным типом метода. На изображении ниже показаны детали.

  1. См. ответ ниже на вкладке Body и сосредоточьтесь на ошибке .

Это означает, что используемый нами тип метода недействителен и ожидается другой тип метода. Поэтому мы попытаемся изменить это и посмотрим, получим ли мы правильный ответ.

Запрос POST без тела
  1. Измените тип метода на POST и нажмите ОТПРАВИТЬ

  1. Теперь взгляните на тело ответа и код состояния ответа .

Fault Invalid Post Request означает, что введенные нами данные поста недействительны . Напомним, что мы добавляем информацию в тело запроса, поэтому нам нужно что-то ввести в тело запроса и посмотреть, соответствует ли этот формат ожидаемому формату. Кроме того, вы можете увидеть код состояния, который говорит 400 БАД Запрос . Это означает, что параметры запроса не соответствуют параметрам сервера для получения ответа.

Почтовый запрос в почтальоне
  1. Теперь давайте добавим тело запроса в наш POST-запрос. Каждая конечная точка будет задокументирована с типом метода и форматом тела, который она ожидает. Давайте посмотрим, какое тело ожидает этот запрос и как его добавить. Для этого нажмите на Кузов табл.

  1. Нажмите на raw и выберите тип формата JSON , так как мы должны отправить неправильный формат, который ожидает сервер.

  1. Эта конечная точка ожидает тело Json , содержащее сведения о новом пользователе. Ниже приведен образец корпуса Json . Скопируйте и вставьте следующее на вкладке body Postman.

{

* «Имя»: «значение»*

* «Фамилия : «значение»,*

«Имя пользователя: «значение»,

«Пароль»: «значение»,

«Электронная почта»: «Значение»

}

Измените значение атрибута на любое значение, которое вы хотите ( см. на изображении ниже ).

  1. Нажмите Отправьте и посмотрите тело ответа и Статус ответа.

Ошибка Ошибка пользователя уже выходит  означает, что в базе данных уже была создана аналогичная запись вами или кем-либо ранее. Принимая во внимание, что если вы видите, что статус ответа равен 200 OK, , это означает, что сервер принял запрос и отправил успешный ответ. Из этого мы также можем сделать вывод, что тело ответа было правильным и сервер смог его интерпретировать. Теперь в этом запросе API адрес электронной почты и имя пользователя должны быть уникальными. Таким образом, вы можете изменить эти значения ( любой подойдет и ).

Если значения уникальны, вы получите этот ответ

Операция успешно завершена  означает, что ваша запись успешно создана в базе данных.

Итак, на этом примере видно, что всякий раз, когда нам нужно отправить POST-запрос , он должен сопровождаться Body. Тело должно быть в правильном формате и с правильными ключами, чтобы получить правильный ответ от сервера. Теперь мы подробно узнаем о каждой функции почтового запроса в Postman.

Различные способы отправки данных в запросе POST в Postman

Как мы обсуждали ранее, отправка POST-запроса означает отправку запроса с данными, завернутыми в тело запроса. Могут быть разные типы данных и, соответственно, разные способы отправки данных. Выполняя эти шаги, вы подробно узнаете об этом.

  1. Выберите тип запроса метода как POST в построителе, как показано.

Как только вы выберете тип запроса POST в Postman, вы увидите, что включена опция Body, которая имеет различные параметры для отправки данных внутри тела. Эти варианты:

  • Данные формы
  • X-www-form-urlencoded
  • Сырье
  • Двоичный

Данные формы

Данные формы, как следует из названия, используются для отправки данных, которые вы заключаете в форму, например сведений, которые вы вводите при заполнении формы. Эти данные отправляются путем записи их в виде пар KEY-VALUE , где ключом является « имя » записи, которую вы отправляете, а значением является ее значение . Следующие шаги прояснят ситуацию.

1. Выберите данные формы

  1. Добавьте следующую пару КЛЮЧ-ЗНАЧЕНИЕ
  • Имя : Хариш
  • Фамилия : Rajora

Здесь первое имя в поле некоторой формы ( текстовое поле здесь ), которое необходимо ввести, и Harish  является его значением, то есть значением, введенным пользователем. То же самое касается идентификатора фамилии.

x-www-form-urlencoded

Данные форм и x-www-form-urlencoded очень похожи. Оба они используются практически для одних и тех же целей. Но разница между данными формы и x-www-form-urlencoded заключается в том, что URL-адрес будет закодирован при отправке через x-www-form-urlencoded . Кодировка означает, что отправляемые данные будут закодированы в разные символы, чтобы их нельзя было распознать, даже если они подверглись атаке.

Сырье

Raw — наиболее часто используемая часть или параметр при отправке тела методом POST. Это важно с точки зрения Почтальона. Необработанный означает, что сообщение тела отображается как поток битов, представляющий тело запроса. Эти биты будут интерпретироваться как строковый сервер.

  1. Нажмите на раскрывающийся список, кроме двоичный  и там можно увидеть все варианты, в которых вы можете отправить запрос

  1. Нажмите JSON (приложение/json)

  1. В редакторе ниже скопируйте и вставьте этот

{

"имя": "суровый",

"фамилия": "Раджора"

}

Это те же данные, которые ранее отправлялись с данными формы, но теперь они отправляются в формате JSON.

Двоичный

Binary предназначен для отправки информации в формате, который нельзя ввести вручную. Поскольку все в компьютере преобразуется в двоичный файл, мы используем эти параметры, которые нельзя записать вручную, такие как изображение, файл и т. д. Чтобы использовать этот параметр

  1. Нажмите на двоичный файл , будет доступна опция ВЫБРАТЬ ФАЙЛЫ

  1. Выберите любой файл, например файл изображения.

Примечание : Если вы хотите отправить на сервер некоторые данные вместе с файлом, это также можно сделать в форме данных.

Нажмите на форму-данные

Введите файл в качестве ключа

, и вы увидите скрытый раскрывающийся список, в котором по умолчанию указано «Текст». Вы можете выбрать любой формат файла, а затем выбрать файл из системы.