2016-08-18 93 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。谢谢。 –