Проблемы с загрузкой файлов в Python urllib2 - PullRequest
6 голосов
/ 02 января 2009

В настоящее время я пытаюсь начать загрузку файла с помощью urllib2 и библиотеки urllib2_file . Вот мой код:

import sys
import urllib2_file
import urllib2

URL='http://aquate.us/upload.php'
d = [('uploaded', open(sys.argv[1:]))]
req = urllib2.Request(URL, d)
u = urllib2.urlopen(req)
print u.read()

Я поместил этот файл .py в папку «Мои документы» и поместил ярлык для него в папку «Отправить» (URL-адрес ярлыка).

Когда я щелкаю правой кнопкой мыши файл, выбираю Отправить и выбираю Акват (мой питон), он открывает командную строку на долю секунды, а затем закрывает ее. Ничего не загружается.

Я знал, что, вероятно, произошла ошибка, поэтому я печатал код на CL python, строка за строкой. Когда я запустил строку u=urllib2.urlopen(req), я не получил ошибку; альтернативный текст http://www.aquate.us/u/55245858877937182052.jpg

Вместо этого курсор просто начал мигать на новой строке под этой строкой. Я подождал пару минут, чтобы посмотреть, случится ли что-нибудь, но так и осталось. Чтобы остановить его, мне пришлось нажать Ctrl + Break.

Что за сценарий?

Заранее спасибо!

[Изменить] Забыл упомянуть - когда я запускал скрипт без данных запроса (файла), он запускался как чудо. Это проблема с urllib2_file?

[править 2]:

import MultipartPostHandler, urllib2, cookielib,sys
import win32clipboard as w
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),MultipartPostHandler.MultipartPostHandler)
params = {"uploaded" : open("c:/cfoot.js") }
a=opener.open("http://www.aquate.us/upload.php", params)
text = a.read()
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardText(text)
w.CloseClipboard()

Этот код работает как талисман, если вы запускаете его через командную строку.

Ответы [ 3 ]

2 голосов
/ 02 января 2009

Если вы используете Python 2.5 или новее, urllib2_file не нужен и не поддерживается, поэтому проверьте, какую версию вы используете (и, возможно, обновите).

Если вы используете Python 2.3 или 2.4 (единственные версии, поддерживаемые urllib2_file), попробуйте запустить пример кода и посмотрите, есть ли у вас такая же проблема. Если это так, вероятно, что-то не так с вашей установкой Python или urllib2_file.

EDIT:

Кроме того, вы, похоже, не используете ни один из двух поддерживаемых urllib2_file форматов для данных POST. Попробуйте использовать одну из следующих двух строк:

d = ['uploaded', open(sys.argv[1:])]
## --OR-- ##
d = {'uploaded': open(sys.argv[1:])}
0 голосов
/ 26 октября 2010

Если вы все еще на Python2.5, мне помогло загрузить код здесь:

http://peerit.blogspot.com/2007/07/multipartposthandler-doesnt-work-for.html

и сохраните его как MultipartPostHandler.py

затем используйте:

import urllib2, MultipartPostHandler

opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler())
opener.open(url, {"file":open(...)})

или, если вам нужны куки:

import urllib2, MultipartPostHandler, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MultipartPostHandler.MultipartPostHandler())
opener.open(url, {"file":open(...)})
0 голосов
/ 02 января 2009

Во-первых, есть третий способ запуска программ на Python.

Из cmd.exe введите python myprogram.py. Вы получаете хороший журнал. Вам не нужно набирать вещи по одной строке за раз.

Во-вторых, проверьте документацию urrlib2 . Вам также нужно взглянуть на urllib .

Для запроса требуется URL-адрес и закодированный в буфере URL-адрес.

данные должны быть буфером в стандарт применение / х-WWW-форм-urlencoded формат. Urllib.urlencode () функция принимает отображение или последовательность из 2-х кортежей и возвращает строку в этот формат.

Вам необходимо закодировать ваши данные.

...