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

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

  • автор:

Get запрос с параметрами Python

Подскажите, пожалуйста, как мне сформировать get запрос и в параметрах отдать тип запроса (query_type ), чтобы принимающая сторона поняла что передавать и отдала мне нужные данные ? Всего лишь два типа запроса у меня . query_type = 1 query_type = 2

Отслеживать
задан 12 июл 2019 в 12:51
Сергей Янченко Сергей Янченко
3 1 1 серебряный знак 2 2 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вы можете воспользоваться пакетом urllib .

Пример:

import urllib.parse as urlparse from urllib.parse import urlencode # URL, на который собираетесь отправлять запрос url = 'http://ru.stackoverflow.com/search?q=question' # Параметры запроса params = < 'tag': 'python', >url_parts = list(urlparse.urlparse(url)) query = dict(urlparse.parse_qsl(url_parts[4])) query.update(params) url_parts[4] = urlencode(query) # Готовый URL new_url = urlparse.urlunparse(url_parts) # http://ru.stackoverflow.com/search?q=question&tag=python 

UPD:

Или библиотекой requests .

Пример:

import requests # URL, на который собираетесь отправлять запрос url = 'http://ru.stackoverflow.com/search?q=question' # Параметры запроса params = < 'tag': 'python', ># Ответ r = requests.get(url=url, params=params) # r.url = 'https://ru.stackoverflow.com/search?q=question&tag=python' 

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

Как передать параметры в 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

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

Есть ли питонячий способ, как передать параметры в стандартной библиотеке urllib? Ссылка идет такой:

https://worldoftanks.ru/wgris/hof/achievements/full/?lang=ru&page=1&page_size=20&battles_count=100&tier_group=1&time_slice=2018-11&stat_type=sbr

Пока что я так реализовал:

from urllib.request import urlopen from urllib.parse import urlencode params = < 'lang': 'ru', 'page': '1', 'page_size': '20', 'battles_count': '100', 'tier_group': '1', 'time_slice': '2018-11', 'stat_type': 'sbr', >r = urlopen("https://worldoftanks.ru/wgris/hof/achievements/full?" + urlencode(params)) print(r) 

Но он выдает исключение urllib.error.HTTPError: HTTP Error 404: Not Found что у меня не так?

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

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