首页 > 技术文章 > yum_apt_golang_curl_py3_pip3_php_git_wget_svn_设置_proxy_socks5_tsocks

osnosn 2020-03-11 17:34 原文

yum_apt_golang_curl_py3_pip3_php_git_wget_svn_设置_proxy_socks5_tsocks

转载注明来源: 本文链接 来自osnosn的博客,写于 2020-03-11.

各种客户端应用的代理设置,支持的代理类型

yum

  • centos7 修改 /etc/yum.conf
    • 如 http 代理, 添加一行 proxy=http://192.168.2.2:80
    • 如 socks5 代理, 添加一行 proxy=socks5://192.168.2.2:1080
    • 支持 http, ftp, https, socks4, socks4a, socks5, socks5h 这几种代理类型。
  • centos8 修改 /etc/dnf/dnf.conf
    • 如 http 代理, 添加一行 proxy=http://192.168.2.2:80
    • 如 socks5 代理, 添加一行 proxy=socks5://192.168.2.2:1080
    • 同centos7, 支持 http, ftp, https, socks4, socks4a, socks5, socks5h 这几种代理类型。
    • 另, 还支持 socks, 大概是会自动判断socks4 or 5 的版本吧。(我猜测)
      • proxy=socks://192.168.2.2:1080

apt

  • /etc/apt/apt.conf 文件中加入一行:
  • 支持http代理: Acquire::http::Proxy "http://192.168.2.2:80";
  • 支持socks5h代理(remote DNS解析): Acquire::http::Proxy "socks5h://192.168.2.2:1080";

golang

  • go get 指令支持 环境变量 http_proxy 和 https_proxy,指定普通代理。
    或者只用 GOPROXY=https://goproxy.io,direct 环境变量。见 【goproxy.io】首页的介绍。
    或者 GOPROXY=https://goproxy.cn,direct 环境变量。见 【goproxy.cn】首页的介绍。
    • GOPROXY= 只接受 https 。如要用 http,则要设置 GO111MODULE=on 。
    • goproxy.io 不是用常规的代理协议。go 访问 github.com , 会以 https://goproxy.io/github.com/xxx 的形式访问。
  • "net/http" 包, 缺省支持 http 和 socks5 代理.
proxystr="http://192.168.2.2:80"      //http proxy
proxystr="socks5://192.168.2.2:1080"  // socks5 proxy(remote DNS解析)
proxyURL, err = url.Parse(proxystr)
tr = &http.Transport{
   TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
   Proxy:           http.ProxyURL(proxyURL),
}
client = &http.Client{Timeout: time.Duration(20) * time.Second, Transport: tr}
req, _ = http.NewRequest("GET", myurl, nil)
resp, err := client1.Do(req)
   ...
   ...
  • golang net.DialTCP( ) 不支持http的CONNECT代理,也不支持socks5代理。
    • 自己实现吧。这两种代理都比较简单,协议并不复杂。
    • 实现参考: 一个简单的Golang实现的Socks5 Proxy
    • 注意:如果不打算提供账号,发送 05 01 00 就好。 如果你发 05 02 00 02, 有的socks5服务即使不需要账号认证也会回复 05 02, 导致认证失败。
  • "net/http" 包中的socks5支持,来自net/http/socks_bundle.go中的func socksNewDialer()
  • socks5的另一个支持包是,import "golang.org/x/net/proxy"中的func SOCKS5(),最终的支持来自import "golang.org/x/net/internal/socks"。(golang.org 难以访问,比较累。)

curl

  • 支持 http:// https:// socks4:// socks4a:// socks5:// socks5h://
    • socks5h://(remote DNS解析)
  • 支持 环境变量, 比如:
    • http_proxy=socks5://1.1.1.1:1080
    • https_proxy=socks5://1.1.1.1:1080
    • ALL_PROXY=socks5://1.1.1.1:1080
  • 设置 ~/.curlrc
proxy=http://user:pw@127.0.0.1:888
#proxy=socks5h://user:pw@127.0.0.1:1080

python3 urllib.request ; requests ; pycurl

  • urllib.request
import urllib.request,ssl
context = ssl._create_unverified_context()
#myhh=urllib.request.ProxyHandler({
#  'http'  : 'http://192.168.2.2:80',
#  'https' : 'http://192.168.2.2:80',
#  })
#opener = urllib.request.build_opener(myhh,urllib.request.HTTPSHandler(context=context))#不验证证书
opener = urllib.request.build_opener(urllib.request.HTTPSHandler(context=context))#不验证证书
opener.add_handler(urllib.request.ProxyHandler({
    'http' : 'http://192.168.2.2:80', #py3检查第一行的代理协议,支持 http:// https://
    'https' : 'http://192.168.2.2:80' #py3不检查,无论写什么,代理协议与第一行相同。
    }))
req=urllib.request.Request('http://baidu.com')
con=opener.open(req)
print(con.read())
  • py3 的 urllib.request 不直接支持 socks5 代理。
    需要 PySocks 包支持。pip3 install PySocksapt install python3-socksyum install python36-pysocksdnf install python3-pysocks
import urllib,urllib.parse,urllib.request
import ssl
import socks,sockshandler

context = ssl._create_unverified_context()
mys5=sockshandler.SocksiPyHandler(socks.SOCKS5,'192.168.2.2',1080,rdns=True) #add_handler()无效
#mys5=sockshandler.SocksiPyHandler(socks.SOCKS5,'192.168.2.2',1080,username='user',password='pwd',rdns=True) #add_handler()无效
opener = urllib.request.build_opener(mys5,urllib.request.HTTPSHandler(context=context))#不验证证书
req=urllib.request.Request('http://baidu.com')
con=opener.open(req)
  • py3 的 requests-2.24 包支持http和socks5代理, (需要装PySocks)
import requests
## verify=False 访问https时不检查证书
# 去除不检查证书的警告
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
#proxy={'http':'http://user:pwd@192.168.1.100:88','https':'http://user:pwd@192.168.1.100:88'}
proxy={'http':'socks5://user:pwd@192.168.1.100:1080','https':'socks5://user:pwd@192.168.1.100:1080'}
rr = requests.get(url, headers = header, allow_redirects=False,verify=False,proxies=proxy,timeout=5)
  • py3 的 pycurl 也支持http和socks5代理

pip3

  • 命令行参数,--proxy=socks5://user:pwd@192.168.1.22:1080, --proxy=http://user:pwd@192.168.1.22:8080
  • ~/.pip/pip.conf 用户配置文件中: (顺便改镜像为"华为云")
[global]
# timeout 缺省 15
timeout = 60
index-url = https://repo.huaweicloud.com/repository/pypi/simple
#index-url = https://mirrors.aliyun.com/pypi/simple/
proxy = socks5://usr:pwd@192.168.1.22:1080
#proxy = http://usr:pwd@192.168.1.22:8080

PHP

  • 使用 php 的 curl 函数,支持http和socks5代理。 $ch=curl_init();
    • curl_setopt($ch, CURLOPT_PROXY, 'socks5h://user:pwd@192.168.1.1:1080');
    • curl_setopt($ch, CURLOPT_PROXY, 'http://user:pwd@192.168.1.1:8080');

tsocks 1.8

git

wget

  • 支持环境变量 http_proxy= , https_proxy=
  • 或者设置 ~/.wgetrc
https_proxy = http://user:pwd@127.0.0.1:8087/
http_proxy = http://user:pwd@127.0.0.1:8087/
ftp_proxy = http://user:pwd@127.0.0.1:8087/
#proxy_user=user
#proxy_password=pwd
# If you do not want to use proxy at all, set this to off.
use_proxy = on
  • wget 无论是环境变量,还是 .wgetrc 只支持 http 代理,不支持 socks5
    如果非要使用 socks5 ,那就套上 tsocks 。

svn

  • svn 配置代理,支持 http 代理,不支持 socks5
    修改 ~/.subversion/servers[global]
    http-proxy-host
    http-proxy-port
    http-proxy-username
    http-proxy-password

转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/12461119.html 来自osnosn的博客.

推荐阅读