0
我在GAE上的特定URL上使用urllib2.urlopen时遇到问题。当我使用Eclipse运行相同的代码时,我能够检索网站数据,但是当我尝试使用GAE实现时,出现'状态500内部服务器错误'。urllib2.urlopen()在GAE上返回特定URL上的错误500
在普通的Python应用程序中,我有以下代码可以正常工作。
query2 = {'ORIGIN': 'LOS','DESTINATION':'ABV', 'DAY':'23',
'MONTHYEAR': 'JAN2012', 'RDAY': '-1', 'RMONTHYER': '-1',
'ADULTS': '1', 'KIDS': '0', 'INFANTS': '0', 'CURRENCY': 'NGN',
'DIRECTION': 'SEARCH', 'AGENT': '111210135256.41.138.183.192.29025'}
encoded = urllib.urlencode(query2)
url3 = 'http://www.flyaero.com/cgi-bin/airkiosk/I7/171015'
request = urllib2.urlopen(url3, encoded)
print 'RESPONSE:', request
print 'URL :', request.geturl()
headers = request.info()
print 'DATE :', headers['date']
print 'HEADERS :'
print '---------'
print headers
data = request.read()
print 'LENGTH :', len(data)
print 'DATA :'
print '---------'
print data
这工作得很好,但与GAE,它没有。这是GAE代码:
class MainPage(webapp.RequestHandler):
def get(self):
query = {'ORIGIN': 'LOS','DESTINATION':'ABV', 'DAY':'23',
'MONTHYEAR': 'JAN2012', 'RDAY': '-1', 'RMONTHYER': '-1',
'ADULTS': '1', 'KIDS': '0', 'INFANTS': '0', 'CURRENCY': 'NGN',
'DIRECTION': 'SEARCH', 'AGENT': '111210135256.41.138.183.192.29025'}
urlkey = 'http://www.flyaero.com/cgi-bin/airkiosk/I7/181002i?AJ=2&LANG=EN'
urlsearch = 'http://www.flyaero.com/cgi-bin/airkiosk/I7/171015'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
header = { 'User-Agent' : user_agent }
try:
request = urllib2.urlopen(urlkey)
data = request.read()
info = request.info()
except urllib2.URLError, e:
print 'error code: ', e
print 'INFO:'
print info
print ''
print 'Old key is: ' + query['AGENT']
print 'Agent key is ' + query['AGENT']
encoded = urllib.urlencode(query)
print 'encoded data', encoded
print ''
print 'web data'
print''
try:
request2 = urllib2.urlopen(urlsearch, encoded)
data2 = request2.read()
info2 = request2.info()
except urllib2.URLError, e:
print 'error code: ', e
print 'INFO:'
print info2
print ''
print 'DATA: '
print data
有两个调用urllib2.urlopen。第一个工作,但第二个返回错误500,try-except块不会捕获它。
这是由request.info()命令
Status: 500 Internal Server Error
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 1662
我不是develooper服务器上,即时用eclipse显影,并从本地主机我的系统上运行的打印出该消息。的是,在布劳尔和蚀控制台上显示,以及该错误消息,这是消息:
WARNING 2011-12-10 17:29:31,703 urlfetch_stub.py:405] Stripped prohibited headers from URLFetch request: ['Host']
WARNING 2011-12-10 17:29:33,075 urlfetch_stub.py:405] Stripped prohibited headers from URLFetch request: ['Content-Length', 'Host']
ERROR 2011-12-10 17:29:38,305 __init__.py:463] ApplicationError: 2 timed out
<pre>Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 700, in __call__
handler.get(*groups)
File "C:\Users\TIOLUWA\Documents\CODES\Elipse\FlightShop\flightshop.py", line 124, in get
request2 = urllib2.urlopen(urlsearch, encoded)
File "C:\python25\lib\urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "C:\python25\lib\urllib2.py", line 381, in open
response = self._open(req, data)
File "C:\python25\lib\urllib2.py", line 399, in _open
'_open', req)
File "C:\python25\lib\urllib2.py", line 360, in _call_chain
result = func(*args)
File "C:\python25\lib\urllib2.py", line 1107, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\python25\lib\urllib2.py", line 1080, in do_open
r = h.getresponse()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\dist\httplib.py", line 213, in getresponse
self._allow_truncated, self._follow_redirects)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\urlfetch.py", line 260, in fetch
return rpc.get_result()
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 592, in get_result
return self.__get_result_hook(self)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\urlfetch.py", line 358, in _get_fetch_result
raise DownloadError(str(err))
DownloadError: ApplicationError: 2 timed out
那么,它可能不是一个URLError然后。但我们当然不知道,因为你没有告诉我们错误是什么。它将在日志中,或者在开发服务器上的控制台中。 –
@DanielRoseman我添加了从request.info()apprently获得的错误消息,我也从eclipse的控制台添加了错误消息,因为我没有在GAE服务器上运行 – TiOLUWA