2015-10-05 34 views
1

此開發環境正常工作:urllib2.urlopen(URL)許可的應用引擎(GAE)

url = "http://www.google.com/" 
return urllib2.urlopen(url) 

但是,當我把它上傳到Google Apps引擎並運行它在那裏,我得到了以下錯誤:

return urllib2.urlopen(url) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 127, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 404, in open 
    response = self._open(req, data) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 422, in _open 
    '_open', req) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 382, in _call_chain 
    result = func(*args) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1214, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1184, in do_open 
    raise URLError(err) 
URLError: <urlopen error [Errno 13] Permission denied> 

任何人都知道爲什麼會發生這種情況?非常感謝!

+0

可能重複:http://stackoverflow.com/questions/28081350/what-c​​auses-urlopen-error-errno-13-permission-denied-errors – jvdh

+0

@jvdh GAE使用的urllib2只作爲自己實現包裝(在請求由GCP資源處理),所以我不認爲這些問題是相關的。 – Ani

+1

您是否嘗試過使用其他網址的相同代碼?最好的是非Google,非重定向和非SSL。例如:'url =「http://www.heise.de」' – Ani

回答

0

這可能是Google實施的bot或DDoS防護功能。 Google可能不希望人們在他們自己的GAE上託管服務,然後加載他們的主頁。也許有一天是無辜的,但想象一下你的無限循環。谷歌自己的基礎設施可以用來攻擊它自己的主頁。解釋爲什麼(大多數)其他URL可以工作。

當通過Google雲相關IP的urlopen請求提交時,某些網址(例如:亞馬遜產品頁面)將會提交403個URL。這由亞馬遜實施,以防止在亞馬遜上的漫遊器,內容抓取,DoS等。原理相同。

相關問題