Python Requests Post

Введение

Примеры

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

 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) 

Синтаксис

Параметры

Примечания