Поиск Google возвращает None 302 на AppEngine

Я обращаюсь к поисковой системе Google, и он работает нормально, возвращая ожидаемые результаты. Когда тот же код развертывается в AppEngine, он возвращает None 302.

Следующая программа возвращает ссылки, возвращенные в результатах поиска Google.

# The first two imports will be slightly different when deployed on appengine from pyquery import PyQuery as pq import requests import random try: from urllib.parse import quote as url_quote except ImportError: from urllib import quote as url_quote USER_AGENTS = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100 101 Firefox/22.0', 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5', 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',) SEARCH_URL = 'https://www.google.com/search?q=site:foobar.com%20{0}' def get_result(url): return requests.get(url, headers={'User-Agent': random.choice(USER_AGENTS)}).text def get_links(query): result = get_result(SEARCH_URL.format(url_quote(query))) html = pq(result) return [a.attrib['href'] for a in html('.l')] or \ [a.attrib['href'] for a in html('.r')('a')] print get_links('foo bar') 

Код, развернутый на AppEngine:

 import sys sys.path[0:0] = ['distlibs'] import lxml import webapp2 import json from requests import api from pyquery.pyquery import PyQuery as pq import random try: from urllib.parse import quote as url_quote except ImportError: from urllib import quote as url_quote USER_AGENTS = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100 101 Firefox/22.0', 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5', 'Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5',) SEARCH_URL = 'https://www.google.com/search?q=site:foobar.com%20{0}' def get_result(url): return api.get(url, headers={'User-Agent': random.choice(USER_AGENTS)}).text def get_links(query): result = get_result(SEARCH_URL.format(url_quote(query))) html = pq(result) return [a.attrib['href'] for a in html('.l')] or \ [a.attrib['href'] for a in html('.r')('a')] form=""" <form action="/process"> <input name="q"> <input type="submit"> </form> """ class MainHandler(webapp2.RequestHandler): def get(self): self.response.out.write("<h3>Write something.</h3><br>") self.response.out.write(form) class ProcessHandler(webapp2.RequestHandler): def get(self): query = self.request.get("q") self.response.out.write("Your query : " + query) results = get_links(query) self.response.out.write(results[0]) app = webapp2.WSGIApplication([('/', MainHandler), ('/process', ProcessHandler)], debug=True) 

Я пробовал запросы с протоколами http и https. Ниже приведен журнал приложений AppEngine для запроса.

 Starting new HTTP connection (1): www.google.com D 2013-12-21 13:13:37.217 "GET /search?q=site:foobar.com%20foo%20bar HTTP/1.1" 302 None I 2013-12-21 13:13:37.218 Starting new HTTP connection (1): ipv4.google.com D 2013-12-21 13:13:37.508 "GET /sorry/IndexRedirect?continue=http://www.google.com/search%3Fq%3Dsite:foobar.com%20foo%20bar HTTP/1.1" 403 None E 2013-12-21 20:51:32.090 list index out of range 

One Solution collect form web for “Поиск Google возвращает None 302 на AppEngine”

Я озадачен тем, почему вы пытаетесь подделать заголовок User-Agent , но если он вас радует, идите на это. Просто обратите внимание, что если urlfetch использует urlfetch под обложками, App Engine добавляет строку в заголовок User-Agent, в котором размещаются ваши приложения, и определяя ваше приложение. (См. https://developers.google.com/appengine/docs/python/urlfetch/#Python_Request_headers ).

Попробуйте передать follow_redirects = False для urlfetch . Вот как вы делаете запросы к другим приложениям App Engine. По совершенно неочевидным причинам это может помочь вам в этом случае.

Python - лучший язык программирования в мире.