Проверка заголовков HTTP POST в Python без загрузки тела - PullRequest
1 голос
/ 01 июня 2011

Веб-сервер отвечает на запрос POST файлом для загрузки (имеет заголовок Content-Disposition). С помощью urllib или механизированного открывателя, в какой момент будет загружено тело ответа?

opener = mechanize.build_opener(HTTPRefererProcessor, HTTPEquivProcessor, HTTPRefreshProcessor)
r = make_post_request() # makes Request object to send
res = opener.open(r)
info = response.info()
content_disp = info.getheader('content-disposition')
filename = content_disp.split('=')[1]
content = res.read() # or skip based on filename

У меня сложилось впечатление, что тело не будет загружаться до тех пор, пока не будет прочитано (), что было бы полезно для пропуска определенной загрузки (например, уже загруженных файлов), но я не вижу значительного улучшения производительности.

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

HTTP - это протокол без установления соединения, что означает, что канал не установлен, в котором сервер может записывать данные в несколько этапов.Поэтому, если серверу отправляется запрос POST или GET, он ДОЛЖЕН ответить полным ответом, поскольку он не может знать, был ли это первый или второй запрос.Cookies, AJAX, Comet помогает эмулировать что-то вроде канала, но его нет.Вот почему существует запрос HEAD: с помощью этого браузер может определить, должен ли ресурс загружаться или нет.

1 голос
/ 01 июня 2011

Ну, когда вам нужны заголовки, вы должны использовать HTTP HEAD.POST и GET по определению будут возвращать содержимое.

С точки зрения остановки загрузки, веб-сервер не будет ждать, чтобы начать отправлять вам данные, и все, начиная с Python и до вашей сетевой карты, начнет получать и буферизовать данные.немедленно.

Так что вам лучше всего найти лучший способ сделать это - например, HTTP HEAD.Если это не вариант, вызовите close () для вашего объекта запроса сразу после получения любых заголовков, которые вам нужны, и надейтесь, что вы не потратили слишком много пропускной способности.

(И для примера использования HTTP HEAD в Python, см. Этот ответ давно .

...