Закодированные по частям сообщения в библиотеке Python запросов - PullRequest
0 голосов
/ 10 января 2020

В настоящее время я разрабатываю программу на Python 3, которая должна отправлять кусочно закодированное сообщение в POST-запросе на произвольный URL-адрес. Как описано в документах библиотеки Requests (см. « chunked-кодированные запросы » в разделе https://requests.readthedocs.io/en/master/user/advanced/), можно использовать Generator для указания фрагментированного закодированного сообщения. На данный момент я не могу проверить, выполняет ли мой генератор свою работу, потому что каждый раз, когда я пытаюсь распечатать тело сообщения запроса с

print(response.request.body)

, я получаю следующее:

<generator object generator at 0x03FEB530>

Например, я хочу отправить следующее сообщение в запросе. (с C ontent-Type: application / x- www-form-urlencoded)

x=FOO

В кодированном по частям сообщении тело сообщения должно выглядеть следующим образом:

5\r\n
x=FOO\r\n
0\r\n
\r\n

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

POST / HTTP/1.1
Host: example.com
Transfer-Encoding: chunked

5
x=FOO
0

Я написал свой собственный генератор и хотел спросить, является ли это правильным способом сделать это. Вы можете увидеть это во фрагменте кода ниже.

def generator():
    var1 = "5\r\n"
    var2= "x=FOO\r\n"
    var3= "0\r\n\r\n"
    x = var1.encode('utf8')
    y = var2.encode('utf8')
    z = var3.encode('utf8')
    yield x
    yield y
    yield z

url = 'https://example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0',
           'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded',
           'Transfer-Encoding': 'chunked'}
response = requests.post(url=url, data=generator(), headers=headers)

Отказ от ответственности: Я не хочу, чтобы мой генератор автоматически генерировал фрагментированную кодировку сообщения, я хочу отправить запрос с указанным c chunked закодированное сообщение, как показано выше.

...