博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让urllib2的DNS亦通过Proxy查询
阅读量:6193 次
发布时间:2019-06-21

本文共 1818 字,大约阅读时间需要 6 分钟。

上一篇文章中讲到的方法,在某些时候不好用。比如我在本机调试链接到facebook的程序,开始没有问题,后来突然就不工作了。得到如下提示:

 

经检查发现出现大的问题仍然是DNS解析。而我本机测试twitter没有问题的原因,也是因为其DNS未被污染。开始时Facebook正常估计也是因为凑巧当时其并未受到污染所致。

经过搜索罚下如下方案,经测试工作正常:

 

至此上文提到的解决django-social-auth的补丁,最终应该是:

def dsa_urlopen(*args, **kwargs):    """Like urllib2.urlopen but sets a timeout defined by    SOCIAL_AUTH_URLOPEN_TIMEOUT setting if defined (and not already in    kwargs)."""    timeout = setting('SOCIAL_AUTH_URLOPEN_TIMEOUT')    if timeout and 'timeout' not in kwargs:        kwargs['timeout'] = timeout    import socks    import socket    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 1080)    socket.socket = socks.socksocket    def _create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,source_address=None):        msg = "getaddrinfo returns an empty list"        host, port = address        if len(address) == 2 and isinstance(address,(list,tuple)) and isinstance(address[0],unicode):            address = (str(address[0]),address[1])        for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):            af, socktype, proto, canonname, sa = res            sock = None            try:                sock = socket.socket(af, socktype, proto)                if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:                    sock.settimeout(timeout)                sock.connect(address)                return sock            except socket.error, msg:                if sock is not None:                    sock.close()        raise socket.error, msg    socket.create_connection = _create_connection    # Magic!    def getaddrinfo(*args):        return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]    socket.getaddrinfo = getaddrinfo    return urlopen(*args, **kwargs)

 

 

转载于:https://www.cnblogs.com/Ankh/archive/2012/12/21/2827386.html

你可能感兴趣的文章
CODING 敏捷实践完全指南
查看>>
unittest测试框架和测试报告的输出实例(一)
查看>>
PYTHON-字符编码
查看>>
指针面试题
查看>>
java Date时间的各种转换方式和Mysql存时间类型字段的分析
查看>>
collectionview 的相关设置
查看>>
【node.js】回调函数
查看>>
Phalcon 訪问控制列表 ACL(Access Control Lists ACL)
查看>>
Android Categroy 详解大全
查看>>
java中的定时器
查看>>
【翻译】EXTJS 编码风格指南与实例
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>
php上传$_FILES 无法取值
查看>>
python 输出当前行号
查看>>
vue21 slot占位
查看>>
12C -- 配置Application Continuity
查看>>
Redis从入门到精通:初级篇(转)
查看>>
刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解【转】
查看>>