Как передать параметры в get запросе python
Перейти к содержимому

Как передать параметры в get запросе python

Как передать параметры в get запросе python

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

http://127.0.0.1:8000/users/add?name=Tom&age=38

Здесь та часть, которая идет после адреса сервера и порта и до вопросительного знака ?, то есть users/add , представляет путь запроса (path). А та часть, которая идет после вопросительного знака, то есть name=Tom&age=38 , представляет строку запроса (query string). В данной статье нас будет интересовать прежде всего строка запроса.

Строка запроса состоит из параметров. Каждый параметр определяется в форме

имя_параметра=значение_параметра

Если строка запроса содержит несколько параметров, то они одтеляются друг от друга знаком амперсанда &. Так, в примере в адресом http://127.0.0.1:8000/users/add?name=Tom&age=38 строка запроса состоит из двух параметров: параметр name имеет значение «Tom», а параметр age имеет значение 38.

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

from fastapi import FastAPI app = FastAPI() @app.get(«/users») def get_model(name, age): return

Получение параметров строки запроса в веб-приложении на FastAPI и Python

Значения по умолчанию

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

Чтобы ошибки не было, можно задать для параметров значения по умолчанию:

from fastapi import FastAPI app = FastAPI() @app.get(«/users») def get_model(name = «Undefined», age = 18): return

Параметры со значению по умолчанию должны идти после обязательных параметров.

Ограничения по типу

Также для параметров строки запроса можно задать ограничения по типу:

from fastapi import FastAPI app = FastAPI() @app.get(«/users») def get_model(name: str, age: int = 18): return

В данном случае параметр name должен представлять тип str, то есть строку, а параметр age — целое число. Если параметру age передать нечисловое значение, то мы получим ошибку.

Query

Дополнительно для работы с параметрами строки запроса фреймворк предоставляет класс Query из пакета fastapi . Класс Query позволяет прежде всего валидировать значения параметров строки запроса. В частности, через конструктор Query можно установить следующие параметры для валидации значений:

  • min_length : устанавливает минимальное количество символов в значении параметра
  • max_length : устанавливает максимальное количество символов в значении параметра
  • regex : устанавливает регулярное выражение, которому должно соответствовать значение параметра
  • lt : значение параметра должно быть меньше определенного значения
  • le : значение параметра должно быть меньше или равно определенному значению
  • gt : значение параметра должно быть больше определенного значения
  • ge : значение параметра должно быть больше или равно определенному значению

Применим некотрые параметры:

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(name:str = Query(min_length=3, max_length=20)): return

В данном случае через строку запроса получаем параметр name . Причем его значение должно иметь не меньше 3 и не больше 20 символов.

Валидация параметров строки запроса в FastAPI

Подобным образом можно использовать другие параметры валидации:

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(name:str = Query(min_length=3, max_length=20), age: int = Query(ge=18, lt=111)): return

В данном случае добавляется параметр «age», который должен представлять число в диапазоне от 18 (включительно) до 111 (не включая)

Валидация с помощью регулярного значения:

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(phone:str = Query(regex=»^\d$»)): return

Здесь параметр phone должен состоять из 11 цифр.

Query позволяет установить значение по умолчанию с помощью параметра default :

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(name: str = Query(default=»Undefined», min_length=2)): return

Здесь, если в запрошенном адресе отстуствует параметр name, то по умолчанию он будет равен строке «Undefined»

Если параметры должны быть необязательными, то параметру default передается значение None :

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(name:str | None = Query(default=None, min_length=2)): if name==None: return else: return

Получение списков значений

Использование класса Query позволяет получать через строку запроса списки. В общем случае списки значений передаются, когда в строке запроса одному параметру несколько раз передаются разные значения. Например, как в запросе по следующему адресу:

http://127.0.0.1:8000/users?people=tom&people=Sam&people=Bob

Здесь параметру people передаются три разных значения, соответственно мы ожидаем, что список people будет содержать три элемента.

Определим следующее приложение:

from fastapi import FastAPI, Query app = FastAPI() @app.get(«/users») def users(people: list[str] = Query()): return

Здесь функция users имеет один параметр — people , который должен представлять список строк — тип list[str] .

Передадим через строку запроса список значений в виде параметра people, например, с помощью запроса http://127.0.0.1:8000/users?people=tom&people=Sam :

передача списков через строку запроса в FastAPI

Сочетание параметров пути и строки запроса

При необходимости можно сочетать параметры пути и строки запроса:

from fastapi import FastAPI, Path, Query app = FastAPI() @app.get(«/users/») def users(name:str = Path(min_length=3, max_length=20), age: int = Query(ge=18, lt=111)): return

GET и POST запросы c модулем requests в Python

Методы requests.get() и requests.post() модуля requests

Передача параметров в URL для HTTP GET-запросов.

Часто в строке запроса URL-адреса, необходимо отправить какие-то данные. При составлении URL-адреса вручную, эти данные задаются в виде пар ключ/значение в конце URL-адреса после вопросительного знака, например httpbin.org/get?key=val . Модуль requests позволяет передавать эти параметры в метод requests.get() виде словаря строк, используя ключевой аргумент params . Например, если надо передать key1=value1 и key2=value2 для GET запроса к URL-адресу httpbin.org/get , то используйте следующий код:

>>> import requests # подготовка дополнительных параметров для GET запроса >>> params = 'key1': 'value1', 'key2': 'value2'> >>> resp = requests.get('https://httpbin.org/get', params=params) # смотрим, что URL-адрес был правильно закодирован >>> print(resp.url) # https://httpbin.org/get?key2=value2&key1=value1 

Обратите внимание, что любой ключ словаря, значение которого равно None , не будет добавлен в строку запроса URL-адреса.

В качестве значения словаря можно передать список дополнительных элементов URL-адреса:

>>> import requests # ключ словаря 'key2' имеет список значений >>> params = 'key1': 'value1', 'key2': ['value2', 'value3']> # создаем GET запрос >>> resp = requests.get('https://httpbin.org/get', params=params) # смотрим полученный URL >>> print(resp.url) # https://httpbin.org/get?key1=value1&key2=value2&key2=value3 

Передача параметров в URL для HTTP POST-запросов.

Как правило, в POST-запросах встает необходимость отправить некоторые закодированные в форме данные. Для этого необходимо передать словарь в аргумент data метода requests.post() . Словарь с данными формы будет автоматически закодирован.

Обратите внимание, что имя аргумента для передачи параметров метода requests.post() , отличается от имени аргумента дополнительных параметров метода requests.get() .

>>> import requests # подготовка параметров для POST-запроса >>> param = 'key1': 'value1', 'key2': 'value2'> # обратите внимание, что для метода POST, аргумент для # передачи параметров в запрос отличается от метода GET >>> resp = requests.post("https://httpbin.org/post", data=param) >>> print(resp.text) # # . # "form": # "key2": "value2", # "key1": "value1" # >, # . # > 

Аргумент data также может иметь несколько значений для каждого ключа. Это можно сделать, передав данные либо списком кортежей, либо словарем со списками в качестве значений. Это особенно полезно, когда форма содержит несколько элементов, использующих один и тот же ключ:

>>> import requests >>> param_tuples = [('key1', 'value1'), ('key1', 'value2')] >>> resp1 = requests.post('https://httpbin.org/post', data=payload_tuples) >>> param_dict = 'key1': ['value1', 'value2']> >>> resp2 = requests.post('https://httpbin.org/post', data=payload_dict) >>> print(resp1.text) # # . # "form": # "key1": [ # "value1", # "value2" # ] # >, # . # > >>> resp1.text == resp2.text # True 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • GET и POST запросы c модулем requests
  • Получение/отправка заголовков сервера модулем requests
  • Извлечение и установка cookies с модулем requests
  • Сессии/сеансы Session() модуля requests
  • Объект ответа сервера Response модуля requests
  • Получение и отправка данных в виде JSON с модулем requests
  • Установка timeout для модуля requests
  • Объект PreparedRequest модуля requests
  • Загрузка файлов на сервер модулем requests
  • Загрузка больших данных модулем requests
  • HTTP-прокси или SOCKS-прокси с модулем requests
  • Использование хуков модуля requests
  • Аутентификация с модулем requests
  • SSL и модуль requests

Как работать с библиотекой requests в Python

Погрузитесь в мир Python с нашей статьей о работе с библиотекой requests: отправка запросов, обработка данных и устранение ошибок — все это здесь!

Алексей Кодов
Автор статьи
10 июля 2023 в 17:48

Библиотека requests в Python — это мощный инструмент для работы с HTTP-запросами. В этой статье мы разберемся, как использовать эту библиотеку для отправки GET, POST, PUT, DELETE и других запросов, а также как обрабатывать полученные данные.

Установка библиотеки requests

Для начала установим библиотеку requests с помощью pip:

pip install requests

Теперь мы готовы начать работу с библиотекой!

Отправка GET-запроса

Для отправки GET-запроса используется функция get() :

import requests response = requests.get('https://api.example.com/data')

Полученный ответ можно обработать следующим образом:

print(response.status_code) # Выводит статус-код ответа (например, 200) print(response.text) # Выводит текст ответа

Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Отправка POST-запроса

Для отправки POST-запроса используется функция post() . В качестве примера отправим данные в формате JSON:

import requests import json data = headers = response = requests.post('https://api.example.com/data', data=json.dumps(data), headers=headers)

Обработка ответа аналогична GET-запросу:

print(response.status_code) print(response.text)

Работа с параметрами запроса

Иногда нужно передать параметры в запросе. Для этого используется аргумент params :

import requests params = response = requests.get('https://api.example.com/data', params=params)

�� В результате, будет отправлен GET-запрос на URL https://api.example.com/data?key=value&key2=value2 .

Обработка ошибок

Для обработки ошибок при отправке запроса можно использовать блок try-except :

import requests from requests.exceptions import RequestException try: response = requests.get('https://api.example.com/data') except RequestException as e: print(f"Ошибка: ")

Заключение

В этой статье мы разобрали основы работы с библиотекой requests в Python. Теперь вы знаете, как отправлять различные типы запросов, передавать параметры и обрабатывать ошибки.

Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Не забывайте практиковаться и изучать дополнительные возможности requests, чтобы стать еще более опытным разработчиком на Python!

Как передать параметры в get запросе python

От параметров, которые передаются через адрес URL, следует отличать параметры, которые передаются через строку запроса. Например, в запросе

http://127.0.0.1:8000/index/3/Tom/

два последних сегмента — 3/Tom/ представляют параметры URL или параметры маршрута. А в запросе

http://127.0.0.1:8000/index?id=3&name=Tom

те же самые значения 3 и Tom представляют параметры строки запроса .

Параметры строки запроса указывается после вопросительного знака ?. Каждый параметр предсталяет пару ключ-значение, напимер, в id=3 : id — название или ключ параметра, а 3 — его значение. Параметры в строке запроса отделяются друг от друга знаком амперсанда.

Для получения параметров из строки запроса применяется метод request.GET.get() , в которую передается название параметра.

Например, определим в файле views.py следующие функции:

from django.http import HttpResponse def index(request): return HttpResponse("

Главная

") def user(request): age = request.GET.get("age") name = request.GET.get("name") return HttpResponse(f"

Имя: Возраст: ")

Функция user принимает извлекает из строки запроса два параметра: name и age.

В файле urls.py определим следующие маршруты:

from django.urls import path from hello import views urlpatterns = [ path("", views.index), path("user/", views.user) ]

При обращении к приложению по адресу http://127.0.0.1:8000/user/?name=Tom&age=22 , параметр name будет иметь значение «Tom», а параметр age — 22.

Параметры строки запроса в Django

Однако возможна ситуация, когда для каких-то параметров не будет передано значение. В этом случае мы можем указать для подобных параметров значение по умолчанию. Для этого изменим определение функции user в views.py :

from django.http import HttpResponse def index(request): return HttpResponse("

Главная

") def user(request): age = request.GET.get("age", 0) name = request.GET.get("name", "Undefined") return HttpResponse(f"

Имя: Возраст: ")

Второй параметр функции request.GET.get() представляет значение по умолчанию для параметра, для которого не задано значение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *