讓urllib2的DNS亦通過Proxy查詢

2022-02-26 23:42:13 字數 1836 閱讀 4728

經檢查發現出現大的問題仍然是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

inkwargs:

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

notsocket._global_default_timeout:

sock.settimeout(timeout)

sock.connect(address)

return

sock

except

socket.error, msg:

if sock is

notnone:

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)

urllib2的異常處理

異常處理 作為爬蟲的抓取過程基本就那麼多內容了,後面再將一些正規表示式的東西簡單介紹一下基本就完事了,下面先說說異常處理的方法。先介紹一下抓取過程中的主要異常,如urlerror和httperror。urlerror可能產生的原因主要有 網路無連線,即本機無法上網 連線不到特定的伺服器 伺服器不存在...

爬蟲 urllib2庫的使用

所謂網頁抓取,就是把url位址中指定的網路資源從網路流中讀取出來,儲存到本地。在python中有很多庫可以用來抓取網頁,我們先學習urllib2。urllib2 官方文件 urllib2 原始碼 urllib2在 python3.x 中被改為urllib.request 我們先來段 urllib2 ...

python中urllib2的學習

get方法 通常用於請求伺服器傳送某個資源,而且應該是安全的和冪等的。post方法 向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理 get和post方法的區別 urlopen url,data none,timeout 傳遞乙個url引數,新增post需要的data,返回值是乙個類...