gae urlfetch local vs uploaded

时间:2012-01-07 16:58:26

标签: google-app-engine http-status-code-403 urlfetch

问题在于,当我在开发环境(谷歌应用引擎的本地服务器)中使用urlfetch.fetch(...)发出POST请求时,我得到HTTP 302状态,正如我所料(我可以进行重定向) )。但是当我上传应用程序并尝试从.appspot.com运行它时,然后使用403获取响应,即“禁止”。

详细说明:

  • 网址是https(我的银行网站)
  • 请求标头中有Cookie
  • ..还有什么?

看起来,远程站点(银行)看到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)如何,似乎都会出现问题。这是我猜的一些会话管理问题..

1 个答案:

答案 0 :(得分:0)

当然理论上银行可能不允许来自某些地方(通过IP地址)的请求。显然你可以向银行询问是否存在任何限制。

请注意RFC 2616说403响应:

  

如果请求方法不是HEAD并且服务器希望公开为什么请求未被满足,那么它应该描述实体中拒绝的原因。

银行的回应可能还有更多细节。

您也可以设置自己的服务,使用它而不是银行的URL并记录所有HTTP标头。发布到此URL就像您向银行发送并进行比较一样,除了请求地址之外,本地计算机和“来自谷歌”的请求是否存在其他差异。