2010-12-13 19 views
0

Ich möchte einige Web-Formular mit Python-Skript füllen und mit POST-Anfrage senden. Das Problem ist, dass das Formular das Laden von Dateien hat. Ich habe folgendes gefunden: poster für Python. Also, ich kam mit FireBug auf der Website mit Formular und füllte es aus. Was ich sah:Bild mit Beitrag senden

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] 

Das Website-Autorisierung verwendet, so habe ich:

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

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

nun den Code, den ich kam von der Website mit Standardprobe und schrieb:

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() 

I don‘ t haben Fehler, etc. Aber nach dem Senden von POST fügt das Skript es nicht in die Datenbank ein (wenn ich das mit den Händen mache, ist alles in Ordnung).

Ich habe diesen Code:

for value in datagen: 
    print value 

Und das Ergebnis ist: link. (Die 123-Nummer im Text ist der Wert dieser Indexvariablen).

Antwort

0

Ich habe Ihren Ansatz zuvor nicht verwendet, aber MultipartPostHandler erfolgreich verwendet, um etwas ähnliches zu tun. Abgekürzt würde ein Beispiel wie folgt aussehen.


import MultipartPostHandler 
import urllib2 

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

MultipartPostHandler kann here.

Sie finden auch urllib2.HTTPCookieProcessor(), um den Opener hinzufügen Authentifizierung wie das zu handhaben:


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) 

Dies ist mein erster Beitrag so vergib mir, wenn ich ein wenig vom Ziel bin :)

+0

Danke, ich werde es in ein paar Stunden überprüfen. – Ockonal

+0

Großartig, es funktioniert! Danke vielmals. – Ockonal

+0

MultipartPostHandler-Verbindung ist nicht verfügbar –

0

Haben Sie die Antwort von jeder der Anfragen überprüft Sie (einschließlich Anmeldung bei der Website) hergestellt Sie sicherstellen haben Wurde die richtige Seite serviert und der richtige Cookie gesetzt?