2012-01-11 105 views
0

我必須一次提交兩個表單,而且我不需要JavaScript。所以我認爲我可以將表格發佈給自己,做我的工作,然後發佈給第三方支付提供商。這是爲了讓訂單出現在我們的數據存儲中。該手冊說明如何通過HTTP POST提交表單,但我不知道如何將用戶的瀏覽器引導至此頁面。有沒有辦法?而不是直接發佈形式向第三方的我覺得做這樣的事:立即提交2個表單

def post(self): 
    import urllib 
    #do my work 
    params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
    f = urllib.urlopen("http://www.thirdparty.com/cgi-bin/query", params) 
    #direct the user to the reponse page but how? 

它將努力提交表單,但用戶必須採取的頁面。有沒有辦法做到這一點?

感謝所有幫助

回答

2

也有一些是你可以這樣做:

得到這個職位,形式,做的東西你的服務器上,然後返回一個重定向頁面包含與同一個表單params但是對遠程目標採取行動。

然後,您可以使用小js自動提交表單,並向用戶提供諸如「不重定向?點擊此處」之類的內容。

所以它不像你期望的那樣工作,它也使用js,但我沒有找到更好的方法來處理這項工作。希望這可以以任何方式幫助。

+0

我認爲它會工作。整件事情都是向PayPal等第三方提交表單,我需要「攔截」並將訂單保存到我的數據存儲區。謝謝你的答案。 – 2012-01-11 18:55:12

+1

執行此操作的常用方法是首先創建訂單,然後將用戶重定向到訂單摘要頁面(他可以在其上檢查/保存/打印),並將標準PayPal按鈕放置在那裏。 – 2012-01-12 00:16:44

+0

謝謝你的幫助。我只是想知道如何讓用戶在重定向頁面取消訂單。我可以有一個清理這個的批處理作業,但是更好的情況是,只有實際與第三方提供者一起提交的訂單纔會寫入到我的數據存儲中。 – 2012-01-12 11:13:23

2

您可以使用307重定向,這將保留所有POST參數(您需要確保您的servlet使用的POST參數與遠程服務器使用的POST參數相同)。

self.response.set_status(307) 
self.response.headers['Location'] = "http://www.thirdparty.com/cgi-bin/query" 

但是,並非所有的瀏覽器都能正確實現307。看到這裏:Response.Redirect with POST instead of Get?

該響應是舊的,所以也許更多的瀏覽器現在正確地處理307。

+0

謝謝你的回答。 – 2012-01-12 11:13:33