问题在于,当我在开发环境(谷歌应用引擎的本地服务器)中使用urlfetch.fetch(...)发出POST请求时,我得到HTTP 302状态,正如我所料(我可以进行重定向) )。但是当我上传应用程序并尝试从.appspot.com运行它时,然后使用403获取响应,即“禁止”。
详细说明:
看起来,远程站点(银行)看到2个请求不同:本地可以,“来自goole”不行。
我的python代码:
url1 = "https://www.ebgz.pl/detal-web/jbank/unlogged/choose/method.do?rid="+str(random.random())+"&srvc="
response = urlfetch.fetch(url1)
lparser = Link_HTMLParser()
lparser.feed(response.content)
url2 = "https://www.ebgz.pl" + lparser.frameSrc
hdrs = {}
hdrs['Referer'] = url1
cookie = response.headers.get('Set-Cookie')
if cookie:
hdrs['Cookie'] = cookie
response = urlfetch.fetch(url2, headers = hdrs)
其中Link_HTMLParser是获取帧源链接的简单解析器(如果你看一下url1的第一个响应内容就会变得清晰):
class Link_HTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == "iframe":
for n,v in attrs:
if n == 'src':
self.frameSrc = v
问题出在第二个回复:来自谷歌的403,来自本地gae serwer的200。 我在问题开头提到了一个POST,但无论方法(GET或POST)如何,似乎都会出现问题。这是我猜的一些会话管理问题..
答案 0 :(得分:0)
当然理论上银行可能不允许来自某些地方(通过IP地址)的请求。显然你可以向银行询问是否存在任何限制。
请注意RFC 2616说403响应:
如果请求方法不是HEAD并且服务器希望公开为什么请求未被满足,那么它应该描述实体中拒绝的原因。
银行的回应可能还有更多细节。
您也可以设置自己的服务,使用它而不是银行的URL并记录所有HTTP标头。发布到此URL就像您向银行发送并进行比较一样,除了请求地址之外,本地计算机和“来自谷歌”的请求是否存在其他差异。