2015-10-19 27 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'})