为Google-cloud-sdk设置http代理

 缘起

在使用google的hg和Google-cloud-sdk时都会遇到需要设置http代理的问题;

方式1: export http_proxy=10.xx.xx.xx:8888      // 无效

方式2: export http_proxy=http://10.xx.xx.xx:8888     // 无效

方式3: export https_proxy=http://10.xx.xx.xx:8888   // 无效

为什么?

分析

通过下面对使用的python的httplib2的代码分析发现:

  1.  http_proxy 或https_proxy  大小写不敏感,也可以写作: HTTP_PROXY   HTTPS_PROXY  (当然,别大小写同时存在)
  2. 代理的形式必须是url形式,如: http://host:port
  3. 对于http请求只参考 HTTP_PROXY , 对于 https 请求只参考 HTTPS_PROXY
  4. 可以通过 no_proxy (大小写不敏感)环境变量使得部分指定的域名不走代理,多个域名用“逗号”分隔,“*”代表所有

 

其他:

对于Go写的程序来讲,对于https请求来讲,优先参考 https_proxy,然后参考http_proxy; 参考: net/http/transport.go

所以,如果有类似错误如下:

Get https://code.google.com/p/snappy-go/source/checkout?repo=: x509: certificate has expired or is not yet valid

请检查是否需要设置 http_proxy

 

关于 no_proxy 的进一步说明:

在玩docker的时候,由于docker是不欢迎 http_proxy https_proxy 这些环境变量的,于是添加 no_proxy 环境变量绕过,如下:

看起来似乎没啥问题,但是问题还是出现了,由于no_proxy 原本是 空的,于是现在的no_proxy 就成了:

似乎也没啥问题呀,但是cloud sdk的httplib2 不小心把 空 匹配了所有域名了,代码如下: (坑爹不?)

 

 

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据