Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1

Заголовки ответа от сервера, которые возвращает requests

08.10.2016, 03:05. Показов 2836. Ответов 5

Студворк — интернет-сервис помощи студентам
Вот такие заголовки на запрос одного файла возвращает мне requests:
Code
1
2
3
4
Date=Fri, 07 Oct 2016 21:15:26 GMT
Server=Apache
X-Powered-By=PHP/5.4.20
Content-Disposition=attachment; filename="СоломаÑ
А вот это взято из брузера на тот же запрос:
Code
1
2
3
4
5
6
7
8
9
10
Connection:Keep-Alive
Content-Disposition:attachment; filename="%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%B0%D1%85%D1%96%D0%BD %D0%BF%D1%80%D0%BE%D1%82%D0%B8 %D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D0%B8.docx";
Content-Length:273297
Content-Type:application/msword
Date:Fri, 07 Oct 2016 23:30:14 GMT
ETag:"7da88b-42b91-4f94778b58980"
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 13 May 2014 12:47:50 GMT
Server:Apache
X-Powered-By:PHP/5.4.20
Вопрос: почему хидеры такие разные и имя файла в непонятной кодировке, да еще и обрезано?
Первоначальный запрос редиректится сервером на другой url - но это ведь питоновские либы сами разруливают и, я так понимаю, мне на этот уровень спускаться не нужно. Тем более, что большинство ответов на запросы файлов приходит с нужными мне хидерами и необрезанными именами (хотя и не в url-encoded, а в неправильно декодированном виде) в Content-Disposition.
Может я чего-то не знаю в requests, что нужно настроить?
PS: По сути на питоне я написал всего пару парсеров - поэтому можете сильно не пинать, если тут все элементарно. Просто поясните, если не затруднит.

PPS: Забыл добавить, что ответ сервера у меня пишется в логфайл в кодировке UTF-8 (ответ скопирован оттуда). И все что мне нужно от заголовка Content-Disposition - это вытащить из имени файла расширение. Со всеми прочими файлами все окей, а с этим, скрипт
Python
1
2
file_name = content_disposition.split("=")[1].strip(';')
ext = os.path.splitext(file_name)[1]
получая такое имя, возвращает пустую строку вместо расширения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2016, 03:05
Ответы с готовыми решениями:

TCppWebBrowser заголовки ответа сервера
Как в TCppWebBrowser можно получить содержимое заголовков ответа сервера?

Как вытащить заголовки ответа от сервера
Приветствую всех, вот кусок кода HttpWebResponse res2 = null; try { using...

Отсутствуют заголовки ответа http сервера
Windows 7 Почему отсутствуют заголовки ответа http сервера (200 OK)? #include <stdio.h> #include <windows.h> int...

5
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.10.2016, 09:31
Garry Galler, скорее всего все дело в том, что ты не менял user agent и т д Если хочешь поведение такое же как и у браузера так ты маскируйся под браузер.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.10.2016, 13:49  [ТС]
alex925,
Я отправляю такие заголовки:
Python
1
2
3
4
5
6
7
8
9
10
11
session = requests.session()
session.headers ={
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "DNT": "1",
    "Referer": main_page,
    "Accept-Encoding": "gzip, deflate, lzma, sdch",
    "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
}
взятые как раз у браузера.

Добавлено через 3 минуты
И такой вопрос: мне же их достаточно присвоить свойству headers у session один раз, а потом везде делать
session.get(url)?

Добавлено через 6 минут
И вот еще: при работе парсера сервер иногда разрывает соединение из-за превышения числа допустимых запросов. Мой скрипт ловит это исключение и пытается восстановить сессию, но
Python
1
2
session = requests.session()
session.headers=headers
заново не делает - это как я понял мое серьезное упущение.

Добавлено через 16 минут
Если нужно привести весь код запроса страницы - могу его привести. Но там примерно 100 строк.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.10.2016, 13:57
мне же их достаточно присвоить свойству headers у session один раз, а потом везде делать
session.get(url)?
Да достаточно.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.10.2016, 15:29  [ТС]
C помощью HTTP Analyzer проследил за своим скриптом:
После запроса сначала ему идет ответ 302 с заголовками:
Code
1
2
3
4
5
6
7
8
9
(Status-Line):HTTP/1.1 302 Found  (эта строка от Analyzer-а)
Date:Sat, 08 Oct 2016 11:18:26 GMT
Server:Apache
X-Powered-By:PHP/5.4.20
Location:/file/37281.docx
Content-Length:0
Keep-Alive:timeout=5, max=100
Connection:Keep-Alive
Content-Type:text/html;charset=UTF-8
Затем приходит это:
Code
1
2
3
4
5
6
7
8
9
10
11
(Status-Line):HTTP/1.1 200 OK
Date:Sat, 08 Oct 2016 11:18:26 GMT
Server:Apache
X-Powered-By:PHP/5.4.20
Content-Disposition:attachment; filename="Соломахін проти України.docx";
Last-Modified:Tue, 13 May 2014 12:47:50 GMT
ETag:"7da88b-42b91-4f94778b58980"
Content-Length:273297
Keep-Alive:timeout=5, max=99
Connection:Keep-Alive
Content-Type:application/msword
Но почему requests возвращает только то, что я привел в первом посте вместо полного ответа по коду 200?

Добавлено через 1 минуту
Похоже, что отсекается весь ответ сразу определенного символа. У requests есть проблемы с кодировками?

Добавлено через 59 минут
вот ссылка на проблемный файл: http://old.minjust.gov.ua/file/37281
Помогите, пожалуйста, скачать этот файл через requests, но при том условии, что тип файла нужно определить исходя из ответа сервера.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
13.10.2016, 14:17  [ТС]
Коллеги, неужели никто не хочет попробовать разобраться?
Мне пока кажется, что это какой-то внутренний баг requests (или urlib3 которая юзается внутри requests).
Если это так - сделаю запрос автору либы. Но а если это мой косяк?
Нужно точно определиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2016, 14:17
Помогаю со студенческими работами здесь

Web приложение на python и заголовки ответа сервера
Добрый день. Написал web приложение на python. Сам формирую заголовки ответа. Почему при запросе страницы в заголовках general...

Как из ответа сервера удалить стартовую строку и заголовки, оставив только тело?
Есть клиент на сокетах, который сохраняет код html страницы в файл. Не получается сделать так, чтобы при сохранении удалялась стартовая...

Заголовки ответа, указаны разные кодировки
при проверке сайта через онлайн ресурс по сео получил такую ошибку может кто объяснить, что не так? страница сохранена в...

как посмотреть код и заголовки HTTP-ответа?
Есть какой-нибудь инструмент, которым можно посмотреть код и заголовки HTTP-ответа?

Библиотека requests возвращает разный html код
В файл "index.html" я запихиваю метод .get() URL =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru