Я хочу загрузить (большой) случайный контент в конечную точку HTTP. Я создаю это, посылаю это, и это никогда не используется снова. Поэтому я хотел бы пропустить сохранение его во временном файле и использование { 'file':open() }
, поскольку мне также нужно использовать форму-urlencoded (вместо multipart).
Я использовал pycurl и его опцию READFUNCTION, но я не хочу зависеть от pycurl.
Возможно ли достичь этого с помощью urllib2 ?
У меня есть этот код:
def upload():
url = 'http://localhost:9999/'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : open(file).read() }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
Но в том виде, в каком он есть, весь файл будет прочитан, когда определено значения .
Так что, если file имеет размер 1 Гб, это не будет работать очень хорошо (если я не пойму, как это работает). Кроме того, я бы предпочел не создавать случайно заполненный файл объемом 1 ГБ.
Хорошо, я могу создать подкласс StringIO , как упомянул Даниэль, и создать случайные данные в read () , но как мне сделать urllib2 ask для read () chunks при загрузке вместо того, чтобы хранить все в памяти сразу?
В попытке быть более конкретным, мне бы очень хотелось, чтобы в Java было что-то вроде urlConnectionInstance.getOutputStream()
, и затем я мог бы писать в него. Или как-то сказать urllib2 читать из моего собственного потока , в то время как фактически выдает данные в потоке загрузки.