Google App Engine无法解析www.facebook.com

时间:2016-08-18 08:58:31

标签: python google-app-engine dns

HACKY SOLUTION

所以我花了很长时间弄清楚为什么这出错了,事实证明我没有错。谷歌是。最终出现的情况是,App Engine的开发SDK中存在一个错误。

要解决此问题(非常烦人),您可以执行以下操作:

打开名为/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)

繁荣,你现在正在使用原始的套接字库。

原始问题

我正在使用Google App Engine来托管我的网络API,我目前需要对某些网站(包括脸谱网)进行一些API调用,拨打任何其他网站的工作都很好,但是当Google App Engine试图解决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',)

1 个答案:

答案 0 :(得分:0)

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

SDK正在模仿这些限制和限制,因此调整它以使用真正的套接字库而不是本地开发环境中提供的套接字库可能不是一个好主意 - 在GAE上部署时,您的应用可能实际上不起作用。