2016-07-07 14 views
0

Der Versuch, ein Skript zu schreiben, das ein Online-Formular unter website ausfüllt und eine ZIP-Datei hochlädt. Ich habe the documentation und severalotherposts auf hier angesehen, aber immer noch nicht mein Skript zum Hochladen der Datei.Upload einer Datei in ein Formular mithilfe von Python-Anfragen

Hier ist die HTML-Quelle für den Datei-Upload:

<input type="file" id="field19567427" name="field19567427" 
size="30" class="fsField fsUpload uploadTypes-jpg,jpeg,gif,png,bmp,tif, 
doc,docx,xls,xlsx,txt,mp3,mp4,aac,wav,au,wmv,avi,mpg,mpeg,zip,gz,rar,z,tgz,tar,sitx" /> 

Hier ist meine Python-Code (vergeben alle meine Importe ich viele verschiedene Ansätze versucht haben):

import urllib 
import urllib2 
import cookielib 
import webbrowser 
import os 
import base64 
import requests 
from pprint import pprint 

walla = "X:\\Test\\Test.html" 
my_file = open("X:\\Some_Directory\\Meh.zip", 'rb') 
values = { 
    "field19567029" : "Some Company", 
    "field20044433" : "Some Email", 
    "field40168419" : "Some Phone Num", 
    "field19567035" : "Some Code", 
    "field19567303" : "Some Distance", 
    "field19567306" : "Map Projection", 

    } 
zippy = { 
    "field19567427" : my_file 
    } 

url = "http://www.formstack.com/forms/?1455656-XG7ryB28LE" 
url2 = "http://httpbin.org/post" 
if os.path.exists(walla): 
    os.remove(walla) 
r = requests.post(url, data=values, files=zippy) 
#r.status_code 
#pprint(r.json()['headers']) 
with open(walla, "w") as f: 
    f.write(r.content) 
+0

Ist dies Ihre für m, kann ich Testdaten einreichen? – Bamcclur

+0

@Bamcclur es ist nicht meine Form, aber ich nehme an, Sie könnten Testdaten, die mein Plan war. Ich konnte jedoch auch keine Datei in dein Testformular hochladen. –

Antwort

1

Mit Ihrer spezifischen URL müssen Sie einige Daten hinzufügen:

url = "http://www.formstack.com/forms/?1455656-XG7ryB28LE" 

session = requests.session() 
r = session.get(url) # This can be used to determine form and viewkey values 

data = { 
    "form": "1455656", # Added 
    "viewkey": "XG7ryB28LE", # Added 
    "_submit": "1", # Added 
    "field19567029" : "Some Company", 
    "field20044433" : "Some Email", 
    "field40168419" : "Some Phone Num", 
    "field19567035" : "Some Code", 
    "field19567303" : "Some Distance", 
    "field19567306" : "Map Projection", 
    } 

files = {"field19567427": open("X:\\Some_Directory\\Meh.zip", 'rb')} 

r2 = session.post(url, data=data, files=files) 
print r2.content  
+0

Ich testete dies anhand meines eigenen Formulars unter https://none-lvgvq.formstack.com/forms/test mit data = {'form': '2408552', 'viewkey': '7e7UZhfqbU', '_submit': '1 ',' field43722688-first ':' first_name ',' field43722688-last ':' last_name '} files = {"field43722693": öffnen ("meh.zip", "rb")} – Bamcclur

+0

Danke für die schnelle Antwort! Es sieht jedoch immer noch nicht so aus, als würde es meine Datei hochladen. Glauben Sie, dass Formstack meinen Datei-Upload blockieren könnte? Oder vielleicht erlaubt eine Firewall an meinem Ende kein Skript, das zu tun? –

+0

@ J.Blake haben Sie versucht, meine Formulardaten mit weniger Feldern zu verwenden? Das sollte deine Firewall testen können. – Bamcclur