请教一个关于 Python Requests 设置 DNS 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Kirikora
V2EX    Python

请教一个关于 Python Requests 设置 DNS 的问题

  •  
  •   Kirikora 2017-10-13 22:46:40 +08:00 8270 次点击
    这是一个创建于 2923 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样,我为了练手写了一个 Pixiv 爬虫,主体写完以后准备加上 HTTP 代理,然后突然想起前段时间 Pixiv 已经被墙了,不过只是 DNS 污染而已,我本地改了 DNS 所以没问题。 可是当我要使用国内代理的时候,这个墙就会是问题了对吧?所以能否让 Requests 使用本地设置的 DNS 解析,然后再把请求丢给代理呢? 当然也可以用国外的代理,不过感觉要找个能用的国外代理不容易,速度也是问题。。。 或者有其他方法嘛?

    11 条回复    2017-10-14 15:15:32 +08:00
    ysc3839
        1
    ysc3839  
       2017-10-13 23:30:04 +08:00 via Android
    可以考虑用 IP 连接,然后设置一下 Host。
    janxin
        2
    janxin  
       2017-10-13 23:32:11 +08:00 via iPhone
    最简单的方式你改一下 hosts 啊…
    xmcp
        3
    xmcp  
       2017-10-13 23:36:30 +08:00   2
    像这样?

    requests.get('http://123.125.114.144',headers={'Host':'www.baidu.com'})
    Va1n3R
        4
    Va1n3R  
       2017-10-13 23:40:00 +08:00
    直接用国外的 VPS,写个爬虫,爬下国外的代理,然后用代理池呗。不一定非要在本机搞呀
    tomczhen
        5
    tomczhen  
       2017-10-13 23:49:31 +08:00   1
    说实话只要和 Web 相关的强烈建议先去看看 HTTP 协议的相关书籍或者 RFC。

    域名在 Client 的作用是通过 DNS 解析到 Server 的 IP,但是请求需要在 Host 头中带上域名,实际请求还是发送到 IP 的。

    举个例子:

    GET /foo.php HTTP/1.1
    Host: example.com
    Connection: keep-alive
    Accept-Encoding: gzip, deflate
    Accept: */*

    基于这个过程有两种方法来解决:

    第一:基于系统环境解决。

    修改本地 Host、指定 DNS

    第二:自己构造请求。

    这种方法需要可以自定义请求的 Host 头,并且需要自己处理解析这块。可以选择硬编码 IP 或者还是采用第一种方法实现。

    可以先使用硬编码 IP 的方式来尝试一下,剩下的就是要确认使用的请求库能否支持自定义 Host 头了。
    如果想进一步解决硬编码 IP 的问题,那么就需要一个 DNS 的库来获得正确的解析记录,再来发起请求。

    剩下的问题就可能出在 HTTPS 上,因为证书校验是需要靠域名校验的,client 处理的方式细节不同通过 IP 发起请求可能会出现证书校验错误,粗暴的方法就是无视证书错误。
    Kirikora
        6
    Kirikora  
    OP
       2017-10-14 00:08:03 +08:00
    @tomczhen 非常感谢!已下单《计算机网络:自顶向下方法》,准备好好学一波
    Kirikora
        7
    Kirikora  
    OP
       2017-10-14 00:12:07 +08:00
    @ysc3839
    @janxin
    @xmcp
    改 hosts 有想到过,不过考虑到 cdn 的问题不知道能不能成功,这方面了解的太少了,明天试试。谢谢回复!
    @Va1n3R
    也是个法子~之前考虑的是能写好打包给同学用用,只是他们不一定有 VPS。
    tomczhen
        8
    tomczhen  
       2017-10-14 00:18:56 +08:00
    @Kirikora 个人觉得对 Web 开发来说专注应用层性价比更高一些,当然有兴趣就随意了。
    时间多个人推荐《 HTTP 权威指南》,时间有限可以看看《图解 HTTP 》。
    Kirikora
        9
    Kirikora  
    OP
       2017-10-14 10:15:13 +08:00
    @tomczhen 好的,主要是计算机三级还没考,准备顺便学一波来着
    ysc3839
        10
    ysc3839  
       2017-10-14 14:00:28 +08:00 via Android
    @Kirikora 我说的是改 HTTP Header 里面的 Host
    hcnhcn012
        11
    hcnhcn012  
       2017-10-14 15:15:32 +08:00 via iPhone
    @Kirikora 计算机网络自顶向下在 http 方面没有 http 权威指南讲的详细,如果光写爬虫的话还是先看后者吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3167 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:56 PVG 18:56 LAX 03:56 JFK 06:56
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86