6

現在、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 は です)。

ファイルを右クリックして [送信] を選択し、[Aquate (my python)] を選択すると、コマンド プロンプトが一瞬開いてから閉じます。何もアップロードされません。

おそらくエラーが発生していることはわかっていたので、コードを CL Python に 1 行ずつ入力しました。この行を実行したとき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()

コマンドラインから実行すると、そのコードは魅力的に機能します。

4

3 に答える 3

2

Python 2.5 以降を使用している場合urllib2_fileは、不要であり、サポートされていないため、使用しているバージョンを確認してください (おそらくアップグレードしてください)。

Python 2.3 または 2.4 ( でサポートされている唯一のバージョン) を使用している場合は、サンプル コードurllib2_fileを実行して、同じ問題があるかどうかを確認してください。その場合、Python またはインストールに問題がある可能性があります。urllib2_file

編集:

urllib2_fileまた、 POST データ用にサポートされている の 2 つの形式のいずれも使用していないようです。代わりに、次の 2 行のいずれかを使用してみてください。

d = ['uploaded', open(sys.argv[1:])]
## --OR-- ##
d = {'uploaded': open(sys.argv[1:])}
于 2009-01-02T17:52:22.773 に答える
0

まず、Python プログラムを実行する 3 番目の方法があります。

cmd.exe から、次のように入力しpython myprogram.pyます。素敵なログが得られます。一度に 1 行ずつ入力する必要はありません。

次に、urrlib2のドキュメントを確認してください。urllibも確認する必要があります。

リクエストには、URL と urlencoded エンコードされたデータのバッファが必要です。

data は、標準の application/x-www-form-urlencoded 形式のバッファである必要があります。urllib.urlencode() 関数は、2 タプルのマッピングまたはシーケンスを受け取り、この形式の文字列を返します。

データをエンコードする必要があります。

于 2009-01-02T17:56:42.000 に答える
0

まだ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(...)})
于 2010-10-25T22:29:34.373 に答える