Документация по Python

Python Requests Post

В: Документация по Python

Введение

Примеры

Простая почта

 from requests import post

foo = post('http://httpbin.org/post', data = {'key':'value'})

 

Будет выполнять простую операцию HTTP POST. Отправленные данные могут быть в большинстве форматов, однако пары ключ-значение являются наиболее распространенными.

Заголовки

Заголовки можно посмотреть:

 print(foo.headers)

 

Пример ответа:

 {'Content-Length': '439', 'X-Processed-Time': '0.000802993774414', 'X-Powered-By': 'Flask', 'Server': 'meinheld/0.6.1', 'Connection': 'keep-alive', 'Via': '1.1 vegur', 'Access-Control-Allow-Credentials': 'true', 'Date': 'Sun, 21 May 2017 20:56:05 GMT', 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'}

 

Заголовки также могут быть подготовлены перед публикацией:

 headers = {'Cache-Control':'max-age=0',
        'Upgrade-Insecure-Requests':'1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Content-Type':'application/x-www-form-urlencoded',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Referer':'https://www.groupon.com/signup',
        'Accept-Encoding':'gzip, deflate, br',
        'Accept-Language':'es-ES,es;q=0.8'
        }

 foo = post('http://httpbin.org/post', headers=headers, data = {'key':'value'})



 

кодирование

Кодировка может быть установлена ​​и просмотрена примерно так же:

  print(foo.encoding)

'utf-8'

foo.encoding = 'ISO-8859-1'

 

Проверка SSL

Запросы по умолчанию проверяют сертификаты SSL доменов. Это может быть отменено:

 foo = post('http://httpbin.org/post', data = {'key':'value'}, verify=False)

 

Перенаправление

Будет выполнено любое перенаправление (например, http на https), это также можно изменить:

 foo = post('http://httpbin.org/post', data = {'key':'value'}, allow_redirects=False)

 

Если после операции была перенаправлена, это значение может быть доступно:

 print(foo.url) 

 

Полная история перенаправлений может быть просмотрена:

 print(foo.history)  

Форма закодированных данных

 from requests import post

payload = {'key1' : 'value1',
           'key2' : 'value2'
           }

foo = post('http://httpbin.org/post', data=payload)

 

Для передачи закодированных данных формы с помощью операции post данные должны быть структурированы как словарь и предоставлены в качестве параметра данных.

Если данные не хотят кодироваться формой, просто передайте строку или целое число в параметр данных.

Укажите в словаре параметр json для запросов на автоматическое форматирование данных:

 from requests import post

payload = {'key1' : 'value1', 'key2' : 'value2'}

foo = post('http://httpbin.org/post', json=payload) 

Файл загружен

С помощью модуля запросов, его необходимо предоставить только дескриптор файла , в отличии от содержимого , извлекаемого с .read() :

 from requests import post

files = {'file' : open('data.txt', 'rb')}

foo = post('http://http.org/post', files=files)

 

Имя файла, content_type и заголовки также могут быть установлены:

 files = {'file':('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}

foo = requests.post('http://httpbin.org/post', files=files)

 

Строки также могут быть отправлены в виде файла, если они поставляются как files параметров.

Несколько файлов

Несколько файлов могут быть предоставлены так же, как один файл:

 multiple_files = [
   ('images',('foo.png', open('foo.png', 'rb'), 'image/png')),
   ('images',('bar.png', open('bar.png', 'rb'), 'image/png'))]

foo = post('http://httpbin.org/post', files=multiple_files) 

Ответы

Коды ответов можно посмотреть из почтовой операции:

 from requests import post

foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.status_code)

 

Возвращенные данные

Доступ к данным, которые возвращаются:

 foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.text)

 

Необработанные ответы

В тех случаях, когда вам необходим доступ к базовому объекту urllib3 response.HTTPResponse, это можно сделать следующим образом:

 foo = post('http://httpbin.org/post', data={'data' : 'value'})
res = foo.raw

print(res.read()) 

Аутентификация

Простая HTTP-аутентификация

Простая HTTP-аутентификация может быть достигнута с помощью следующего:

 from requests import post

foo = post('http://natas0.natas.labs.overthewire.org', auth=('natas0', 'natas0'))


 

Технически это короткая рука для следующего:

 from requests import post
from requests.auth import HTTPBasicAuth

foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPBasicAuth('natas0', 'natas0'))

 

Дайджест-аутентификация HTTP

Проверка подлинности дайджеста HTTP выполняется очень похожим способом, для этого Requests предоставляет другой объект:

 from requests import post
from requests.auth import HTTPDigestAuth

foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPDigestAuth('natas0', 'natas0'))


 

Пользовательская аутентификация

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

Сервер настроен на прием аутентификации, если отправитель имеет правильную строку агента пользователя, определенное значение заголовка и предоставляет правильные учетные данные через HTTP Basic Authentication. Для достижения этого должен быть подготовлен пользовательский класс аутентификации, подклассифицирующий AuthBase, который является основой для реализаций аутентификации запросов:

 from requests.auth import AuthBase
from requests.auth import _basic_auth_str
from requests._internal_utils import to_native_string

class CustomAuth(AuthBase):

    def __init__(self, secret_header, user_agent , username, password):
        # setup any auth-related data here
        self.secret_header =  secret_header
        self.user_agent = user_agent
        self.username = username
        self.password = password

    def __call__(self, r):
        # modify and return the request
        r.headers['X-Secret'] = self.secret_header
        r.headers['User-Agent'] = self.user_agent
        r.headers['Authorization'] = _basic_auth_str(self.username, self.password)

        return r

 

Это можно затем использовать с помощью следующего кода:

 foo = get('http://test.com/admin', auth=CustomAuth('SecretHeader', 'CustomUserAgent', 'user', 'password' )) 

Доверенные

Каждая операция POST запроса может быть настроена на использование сетевых прокси

HTTP / S Прокси

 from requests import post

proxies = {
  'http': 'http://192.168.0.128:3128',
  'https': 'http://192.168.0.127:1080',
   }

foo = requests.post('http://httpbin.org/post', proxies=proxies)

 

Базовая аутентификация HTTP может быть предоставлена ​​следующим образом:

 proxies = {'http': 'http://user:pass@192.168.0.128:312'}
foo = requests.post('http://httpbin.org/post', proxies=proxies)

 

НОСКИ Прокси

Использование прокси - сервера SOCKS требует 3 - й партии зависимостей requests[socks] после того , как установлены носки прокси используются в очень похожим образом HTTPBasicAuth:

 proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}

foo = requests.post('http://httpbin.org/post', proxies=proxies) 

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.