2016-08-18 71 views
0

HACKY SOLUTION

所以我花了相當長的一段時間搞清楚爲什麼出錯了,結果我沒有錯。谷歌是。最終發生的情況是,App Engine的開發SDK中存在一個錯誤。Google App Engine無法解析www.facebook.com

爲了解決這個問題(rediciously惱人的)問題,您可以執行以下操作:

打開文件名爲/appengine/tools/devappserver2/python/sandbox.py

在文件的頂部添加import語句:

import socket as socket_original 

然後替換此:

def load_module(self, fullname): 
    if fullname in sys.modules: 
     return sys.modules[fullname] 
    return self.import_stub_module(fullname) 

有了這個:

def load_module(self, fullname): 
    if fullname == "socket": 
     return socket_original 
    if fullname in sys.modules: 
     return sys.modules[fullname] 
    return self.import_stub_module(fullname) 

呯,你現在使用原始的套接字庫。


原來的問題

我使用谷歌應用程序引擎主機我的網頁API,我現在需要做一些API調用某些網站(包括Facebook),撥打電話到任何其他網站的工作方式很好,但是當谷歌應用程序引擎試圖解析www.facebook.com我得到以下錯誤:

RuntimeError: error('illegal IP address string passed to inet_pton',) 

示例代碼:

# Fetching `www.google.com` 
socket.gethostbyname_ex("www.google.com")  

# Returns: 
[ 
    "www.google.com", 
    [], 
    [ 
     "173.194.65.106", 
     "173.194.65.104", 
     "173.194.65.105", 
     "173.194.65.103", 
     "173.194.65.99", 
     "173.194.65.147" 
    ] 
] 

# Fetching `www.twitter.com` 
socket.gethostbyname_ex("www.twitter.com") 

# Returns: 
[ 
    "twitter.com", 
    [ 
     "www.twitter.com" 
    ], 
    [ 
     "199.16.156.230", 
     "199.16.156.198", 
     "199.16.156.102", 
     "199.16.156.70" 
    ] 
] 

# Fetching `www.facebook.com` 
socket.gethostbyname_ex("www.facebook.com") 

# Raises: 
RuntimeError: error('illegal IP address string passed to inet_pton',) 
+0

你應該添加解決方案作爲問題的答案,而不是問題更新,以防止問題顯示爲未答覆... –

回答

0

GAE支持套接字,但有一些重要的Limitations and restrictions

SDK模仿這些限制和限制,因此調整它以使用實際套接字庫而不是您本地開發環境中提供的套接字庫可能不是一個好主意 - 您的應用程序在GAE上部署時可能實際上不工作。

+0

我明白了。只要你意識到風險,並確定它,你應該沒問題。我看到您已經爲此提交了問題:https://code.google.com/p/googleappengine/issues/detail?id=13215。謝謝。 –