Записать PDF файл из URL используя urllib2 - PullRequest
11 голосов
/ 12 апреля 2011

Я пытаюсь сохранить динамический файл PDF, сгенерированный с веб-сервера, используя модуль python urllib2. Я использую следующий код для получения данных с сервера и записи этих данных в файл, чтобы сохранить PDF-файл на локальном диске.

import urllib2
import cookielib

theurl = 'https://myweb.com/?pdf&var1=1'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders.append(('Cookie', cookie))
request = urllib2.Request(theurl)

print("... Sending HTTP GET to %s" % theurl)
f = opener.open(request)
data = f.read()
f.close()
opener.close()

FILE = open('report.pdf', "w")
FILE.write(data)
FILE.close()

Этот код работает хорошо, но написанный PDF-файл плохо распознается Adobe Reader. Если я делаю запрос вручную с помощью Firefox, у меня нет проблем с получением файла, и я могу визуализировать его без проблем. Сравнивая полученные заголовки http (firefox и urrlib), единственное отличие - это поле заголовка http, которое называется Transfer-Encoding = chunked. Это поле получено в Firefox, но кажется, что оно не получено, когда я делаю запрос urllib. Любое предложение?

1 Ответ

17 голосов
/ 12 апреля 2011

Попробуйте изменить

FILE = open('report.pdf', "w")

на

FILE = open('report.pdf', "wb")

Дополнительный «b» означает запись в двоичном режиме.В настоящее время вы пишете двоичный файл в ASCII / текстовом режиме.

...