0

いくつかのWebフォームにPythonスクリプトを入力し、POSTリクエストで送信したいと思います。問題は、フォームにfileuploadingがあることです。私はこれを見つけました:Pythonのポスター。それで、私はフォーム付きのウェブサイトでFireBugを持ってきて、それを記入しました。私が見たもの:

values[action]  add_save
values[mod] blog
values[depth]   2
values[pid] 121
values[title]   title
values[title_eng]   title_en
img PNG...[a lot of binary image data]

そのサイトは承認を使用しているので、私は次のことを行っています。

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)

opener = poster.streaminghttp.register_openers()
opener.add_handler(authhandler)

今、私はウェブサイトからデフォルトのサンプルを持ってきて、コードを書きました:

index = """some parsed integer"""
datagen, headers = multipart_encode({
        'values[action]': 'add_save',
        'values[mod]': 'blog',
        'values[depth]': '2',
        'values[pid]': index,
        'values[title]' : 'title',
        'values[title_eng]' : 'title_eng',
        'img': open('1.png', 'rb')
    })

request = urllib2.Request(theurl, datagen, headers)
getdata = urllib2.urlopen(request)
print getdata.read()

エラーなどはありません。しかし、POSTを送信した後、スクリプトはそれをデータベースに追加しません(手動で行う場合は、すべて問題ありません)。

私はこのコードを追加しました:

for value in datagen:
    print value

そして結果は次のとおりです:link。(テキスト内の123の数値は、そのインデックス変数値です)。

4

2 に答える 2

0

私はこれまであなたのアプローチを使用したことがありませんが、MultipartPostHandlerを使用して同様のことを行うことに成功しました。省略形の例は次のようになります。


import MultipartPostHandler
import urllib2

form_opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) 
urllib2.install_opener(form_opener)
datagen = {vars}
o=opener.open(url, datagen) 

MultipartPostHandlerはここにあります。

urllib2.HTTPCookieProcessor()をオープナーに追加して、次のように認証を処理することもできます。


import urllib

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 
# Or, (MultipartPostHandler.MultipartPostHandler, urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
login = urllib.urlencode(dict(username='user',password='pass',login='Login')) 
o=opener.open(url, login) 

これは私の最初の投稿なので、私が少しターゲットから外れている場合は許してください:)

于 2010-12-13T21:33:25.417 に答える
0

行った各リクエスト(サイトへのログインを含む)の応答をチェックして、正しいページが提供され、正しいCookieが設定されていることを確認しましたか?

于 2010-12-14T01:26:37.070 に答える