Расчет длины содержимого с помощью Python - PullRequest
3 голосов
/ 14 марта 2012

Я пытаюсь сделать сообщение, однако каждый раз, когда я делал это, я получал ошибку 411 ответа.Я использую библиотеку запросов в Python.

In [1]: r.post(url)
Out[1]: <Response [411]>

Итак, я указал длину содержимого h = {'content-length' : '0'} и попробуйте снова.

In [2]: r.post(url,h)
Out[2]: <Response [200]>

Так здорово, что я добился успеха, однако никакая информация не публикуется.

Я думаю, что мне нужно вычислить длину контента, что имеет смысл, как это может быть«отрезать» пост.

Итак, мой вопрос, учитывая URL www.example.com/import.php?key=value&key=value, как я могу вычислить content-length?(в питоне, если возможно)

Ответы [ 2 ]

1 голос
/ 18 апреля 2012

Отправка POST запроса с пустым телом является абсолютно законной, если заголовок Content-Length отправляется и имеет значение 0. Запросы обычно вычисляют значение для заголовка Content-Length.Наблюдаемое вами поведение, вероятно, связано с проблемой 223 - Content-Length отсутствует.Хотя ошибка не закрыта, похоже, что проблема была исправлена:

C:\>python
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.__version__
'0.11.1'
>>> r = requests.post('http://httpbin.org/post?key1=valueA&key2=valueB')
>>> print r.content
{
  "origin": "77.255.249.138",
  "files": {},
  "form": {},
  "url": "http://httpbin.org/post?key1=valueA&key2=valueB",
  "args": {
    "key2": "valueB",
    "key1": "valueA"
  },
  "headers": {
    "Content-Length": "0",
    "Accept-Encoding": "identity, deflate, compress, gzip",
    "Connection": "keep-alive",
    "Accept": "*/*",
    "User-Agent": "python-requests/0.11.1",
    "Host": "httpbin.org",
    "Content-Type": ""
  },
  "json": null,
  "data": ""
}
0 голосов
/ 20 марта 2012

Выглядит странно, что вы используете метод post без аргумента data (но помещаете данные в URL).

Посмотрите на пример из официальных запросов документации :

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
  "origin": "179.13.100.4",
  "files": {},
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  "url": "http://httpbin.org/post",
  "args": {},
  "headers": {
    "Content-Length": "23",
    "Accept-Encoding": "identity, deflate, compress, gzip",
    "Accept": "*/*",
    "User-Agent": "python-requests/0.8.0",
    "Host": "127.0.0.1:7077",
    "Content-Type": "application/x-www-form-urlencoded"
  },
  "data": ""
}
...