gae urlfetch local vs uploaded - PullRequest
       52

gae urlfetch local vs uploaded

1 голос
/ 07 января 2012

Проблема в том, что когда я выполняю POST-запрос с urlfetch.fetch (...) в среде разработки (локальный сервер механизма приложений Google), я получаю статус HTTP 302, как и ожидалось (я могу сделать перенаправление).Но когда я загружаю приложение и пытаюсь запустить его с .appspot.com, то получаю ответы с 403, что "запрещено".

Подробности:

  • URL-адрес https (сайт моего банка)
  • есть куки в заголовках запросов
  • .. что еще?

Похоже, удаленный сайт (банк) видит, что 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 от Google, и 200 от местного GEA Serwer.Я упоминал о POST в начале моего вопроса, но похоже, что проблема возникает независимо от метода (GET или POST).Я полагаю, это проблема управления сеансом ..

1 Ответ

0 голосов
/ 08 января 2012

Конечно, теоретически возможно, что банк не разрешает запросы из некоторых мест (по IP-адресу).И, очевидно, вы могли бы спросить банк, есть ли какие-либо ограничения.

Обратите внимание, что RFC 2616 говорит о 403 ответе:

Если метод запроса не былHEAD и сервер желают обнародовать, почему запрос не был выполнен, он ДОЛЖЕН описать причину отказа в организации.

Так что, вероятно, в ответе банка есть еще некоторые подробности.

Также вы можете настроить свой собственный сервис, использовать его вместо URL-адреса вашего банка и регистрировать все заголовки HTTP.POST на этот URL, так же, как вы POST в банк и сравнение, есть ли какая-то другая разница в запросе с вашего локального компьютера и "от Google", кроме адреса запроса.

...