惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
Cloudbric
Cloudbric
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
小众软件
小众软件
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
博客园 - 【当耐特】
I
InfoQ
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
O
OpenAI News
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
量子位
宝玉的分享
宝玉的分享

博客园 - 雨吁的嘘

urllib在某些情况下性能低于urllib2 Unix编程艺术心得 美化fedora字体 ie6 - ie9支持Css特性的补丁 django Mysql初始化命令 Mysql post install 在线转换Postgresql 到Mysql nginx upload-progress配置 从源码安装nginx,并增加upload-porgress模块 django默认启用事务时session异常 解决urllib2的DNS远端解析问题,另Django-social-auth很好的支持本地调试 必须为Release版本的Django网站提供404和500.html 更换Chrome为Chromium 为Redhat 6.3安装Famillcollection源 内容丰富的第三方rpm库 多余的拼音导致Python的数据类型错误 CentOS 6.3升级Python2.7.3 解决Tomcat未在IP v4监听问题 Rpm 软件库
让urllib2的DNS亦通过Proxy查询
雨吁的嘘 · 2012-12-21 · via 博客园 - 雨吁的嘘

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

<urlopen error [Errno -2] Name or service not known

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

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

http://www.talesofacoldadmin.com/2012/11/13/proxying-dns-with-python.html

至此上文提到的解决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)