Отправка 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 при утере
атрибута. Если в 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/>"
python — Как отправить POST запрос с параметрами?
Вопрос задан
Изменён 1 год 9 месяцев назад
Просмотрен 416 раз
Хочу спарсить ссылки на гугл миты из сайта своего универа.
Как отправить POST запрос на страницу?
Нужно ввести группу, в моем случае «КІ-19-1», и в ответ получить HTML код с расписанием.
Дальше я уже справлюсь с BS4.
Что-то пробовал написать, но в ответ нет ответа от формы:
import requests import fake_useragent link = "https://dekanat.nung.edu.ua/cgi-bin/timetable.cgi/post" pload = {'group':'КІ-19-1'} user_agent = { "User_Agent":fake_useragent.UserAgent().random } r = requests.post(link,params=pload,headers = user_agent) print(r.text)
- python
- парсер
- post
- form
- requests
2
Адрес, с которого приходят данные, немного отличается. Попробуйте:
import requests from bs4 import BeautifulSoup url = 'https://dekanat.nung.edu.ua/cgi-bin/timetable.cgi?n=700' headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'} payload = { 'faculty': '0', 'teacher': '', 'group': 'ʲ-19-1', 'sdate': '', 'edate': '' , 'n': '700' } r = requests.post(url, headers=headers, data=payload) soup = BeautifulSoup(r.content, 'html.parser')
таблицы в супе:
tables = soup.find_all('div', class_='col-md-6') for table in tables[1:]: print(table.find('h5').text)
выведет:
04.06.2021 П'ятниця 07.06.2021 Понеділок 08.06.2021 Вівторок 09.06.2021 Середа 11.06.2021 П'ятниця
попробуйте искать ссылки как-то так:
table.find('a')['href']
UPD обратите внимание: ваша группа передается как 'group': 'ʲ-19-1'
, а не ‘КІ-19-1’ (пока не выяснил связи, но — как есть)
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
urllib — Как отправить запрос POST?
спросил
Изменено 7 месяцев назад
Просмотрено 841 тысяч раз
Я нашел этот скрипт в Интернете:
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 найдено данные = ответ.чтение() данные 'Перенаправление на 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 название> 6Это решение без каких-либо внешних 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(полезная нагрузка))2
Используйте библиотеку
запросов
для GET, POST, PUT или DELETE, нажав конечную точку REST API. Передайте оставшийся URL-адрес конечной точки API вurl
, полезную нагрузку (dict) вданных
и заголовок/метаданные взаголовков
запросы на импорт, 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
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Сделать запрос POST с помощью cURL
cURL (curl) — это инструмент командной строки с открытым исходным кодом, используемый для передачи данных по сети. POST — это метод HTTP-запроса, который используется для отправки данных на сервер. (Подробнее о запросах POST читайте здесь.)
Формат POST-запроса с помощью curl: [.inline-code]curl -X POST [options] [URL][.inline-code].
Пример запроса POST для отправки задачи списка дел в REST API может выглядеть так:
curl -H 'Content-Type: application/json' \ -d '{ "название": "foo", "body": "bar", "id": 1}' \ -X ПОСТ \ https://example.com/postsЗдесь представлены три варианта:
- [.inline-code]-X[.inline-code] использовался для предоставления метода HTTP, который мы используем для отправки запроса. В данном случае метод POST
- [.inline-code]-d[.inline-code] использовался для предоставления связанных данных в теле HTTP-запроса
- [.inline-code]-H[.inline-code] использовался для указания заголовки для запроса
С каждым из этих параметров также связаны псевдонимы. Например, для [.inline-code]-X[. inline-code] вместо этого можно указать [.inline-code]—request[.inline-code], а для [.inline-code]-H[. встроенный код] вы можете предоставить [.inline-code]—headers[.inline-code].
Это лишь некоторые из возможных вариантов, но есть и многие другие, перечисленные ниже.
[#common-operations]Общие операции запроса POST[#common-operations]
[#sending-form-data]Отправка данных формы[#sending-form-data]
Существует два распространенных способа отправки данных формы с запросами POST, каждый из которых имеет разные типы контента, как показано ниже:
# multipart/form-data ## Текстовое поле curl -H "Тип контента: multipart/form-data" \ -F название=foo \ -F тело=бар \ -Ф \ -X ПОСТ \ https://example.com/posts ## Загрузка изображения curl -H "Тип контента: multipart/form-data" \ -F профиль[email protected] \ https://example.com/avatar.cgi # приложение/x-www-form-urlencoded curl -H "Тип контента: application/x-www-form-urlencoded" \ -d "название=foo" \ -d "тело=бар" \ -d "идентификатор = 1" \ -X ПОСТ \ https://example. com/posts
Как видно из изображения, чтобы использовать тип содержимого multipart/form-data , мы отправляем данные с [.inline-code]-F[.inline-code] (или [.inline-code] —form[.inline-code]). Чтобы использовать тип контента application/x-www-form-urlencoded , мы используем [.inline-code]-d[.inline-code] (или [.inline-code]—data[.inline-code ]) вариант.
Вообще говоря, multipart/form-data чаще используется для отправки двоичных данных, таких как изображения, а application/x-www-form-urlencoded используется для отправки текстовых данных.
По умолчанию HTML-формы отправляют данные с использованием типа содержимого application/x-www-form-urlencoded при отправке.
[#sending-image-data]Отправка данных изображения[#sending-image-data]
Чтобы отправить данные изображения в запросе POST, включите изображение в данные формы, указав перед именем файла префикс [.inline-code ]@[.inline-code] следующий символ:
curl -F profile=@avatar. jpg \ https://example.com/avatar.cgi
Символ @ заставляет содержимую формы быть файлом, который затем загружается на сервер.
В качестве альтернативы мы могли бы закодировать изображение в base64 и отправить его как поле в поле формы или поле тела JSON вашего запроса, но это гораздо менее удобно:
curl -H 'Content-Type: application/json' \ -d '{"изображение": "'"$(base64 ~/avatar.jpg)"'"}' \ -X ПОСТ \ https://example.com/avatar.cgi
[#common-gotchas]Общие ошибки[#common-gotchas]
- Имена аргументов чувствительны к регистру. Например, [.inline-code]-F[.inline-code] соответствует аргументу для данных формы, а [.inline-code]-f[.inline-code] — это флаг, указывающий, хотим ли мы быстро выйти из строя без вывода
- При передаче содержимого типа application/json обязательно заключайте тело JSON в одинарные кавычки, например [.inline-code]-d «{ «title»:»foo» }»[.inline-code] будет недействительным
- Вы можете использовать линии перехода, только если вы включаете [.