2016-07-07 14 views
0

オンラインフォームにこのスクリプトを書き込んでみると、websiteになり、zipファイルがアップロードされます。私はここでthe documentationseveralotherpostsを見てきましたが、まだファイルをアップロードするために私のスクリプトを取得できません。ここでpythonリクエストを使用してフォームにファイルをアップロードする

は、ファイルアップロードのためのHTMLソースである:ここで

<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" /> 

は私のPythonコードである(私は異なるアプローチの多くをしようとしているすべての私の輸入許し):

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

これはあなたのためですそれにテストデータを提出できますか? – Bamcclur

+0

@Bamcclurそれは私のフォームではありませんが、私はあなたがそれに私の計画だったテストデータを提出できると思います。私もあなたのテストフォームにファイルをアップロードすることができませんでした。 –

答えて

1

特定のURLを使用して、データを追加する必要があります:

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

私はこのフォームをデータ= {'form': '2408552'、 'viewkey': '7e7UZhfqbU'、 '_submit': '1'という形でhttps://none-lvgvq.formstack.com/forms/testで自分のフォームに対してテストしました'、' field43722688-first ':' first_name '、' field43722688-last ':' last_name '} ファイル= {"field43722693":open( "meh.zip"、' rb ')} – Bamcclur

+0

迅速な対応に感謝します!しかし、まだ私のファイルをアップロードしているように見えません。あなたはformstackがファイルのアップロードをブロックしていると思いますか?それとも、私の最後のファイアウォールは、スクリプトがそれをすることを許可していないのでしょうか? –

+0

@ J.Blakeフィールド数を減らしてフォームデータを使用しようとしましたか?それはあなたのファイアウォールをテストできるはずです。 – Bamcclur

関連する問題