2015-10-19 30 views
1

我想將表單發佈到第三方Web服務器。如何從GAE發佈表單?

的形式是這樣的:

<form method=post action="http://www.domain.com/path/page.do?id=18&localeCode=en-us"> 
<input type="submit" name="FILTER:name=init" value="Submit" /> 
</form> 

如果我這個HTML加載到瀏覽器並提交表單,正確的頁面由Web服務器返回。如果我使用Alamofire從Swift提交它一切都很好。

但是在App Engine上,使用urllib2或urlfetch返回不同的HTML頁面。

from google.appengine.api import urlfetch 
page = urlfetch.fetch(
    url="http://www.domain.com/path/page.do?id=18&localeCode=en-us", 
    payload={"FILTER:name=init" : "Submit"}, 
    method=urlfetch.POST, 
    headers={"Content-Type": "application/x-www-form-urlencoded"}, 
    deadline=30) 

對於我已經嘗試編碼名稱= init作爲名稱%3Dinit的負載,但沒有任何進一步的成功。

+0

你試圖欺騙用戶代理字符串?我不認爲urlfetch有一個很好的,也許它被拒絕? – JKirchartz

回答

2

您需要在傳遞到urlfetch.fetch之前手動對您的有效載荷字典進行urlencode編碼。請參閱下面的文檔中的示例。

import urllib 

from google.appengine.api import urlfetch 

form_fields = { 
    "first_name": "Albert", 
    "last_name": "Johnson", 
    "email_address": "[email protected]" 
} 
form_data = urllib.urlencode(form_fields) 
result = urlfetch.fetch(url=url, 
    payload=form_data, 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'})