Как передать параметры в 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
Значения по умолчанию
Вполне может быть, что при обращении к приложению пользователь не передаст значения для какого-либо параметра или даже для всех параметров строки запроса. В примере выше все параметры строки запроса являются обязательными. И если мы не передадим хотя бы один из параметров, то мы получим ошибку.
Чтобы ошибки не было, можно задать для параметров значения по умолчанию:
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 символов.
Подобным образом можно использовать другие параметры валидации:
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 :
Сочетание параметров пути и строки запроса
При необходимости можно сочетать параметры пути и строки запроса:
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.
Однако возможна ситуация, когда для каких-то параметров не будет передано значение. В этом случае мы можем указать для подобных параметров значение по умолчанию. Для этого изменим определение функции 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() представляет значение по умолчанию для параметра, для которого не задано значение.