【问题标题】:How can cpanm retrieve settings for a proxy that requires username and passwordcpanm 如何检索需要用户名和密码的代理的设置
【发布时间】:2018-12-07 04:37:02
【问题描述】:

我正在使用 CPANM 与需要用户名和密码的代理进行交互。我在运行“o conf init /proxy/ under cpan”时指定了设置。我的看法是在 unix 环境中用于指定代理的变量在整个环境中并不是标准的。将环境变量设置为正确的值后,其他 unix 实用程序通过代理正常工作。

我的问题如下:

  1. CPANM 如何与任何环境变量交互?他们会是什么?

  2. 我们是否可以查看代码的相关区域来帮助消除歧义,我认为 CPANM 内部有一个 LWP 接口? https://github.com/miyagawa/cpanminus/blob/devel/App-cpanminus/cpanm

####:/mnt/c/Projects$ sudo cpanm install Catalyst::Helper -v
cpanm (App::cpanminus) 1.7040 on perl 5.022001 built for x86_64-linux-gnu-thread-multi
Work directory is /home/####/.cpanm/work/1543605706.124
You have make /usr/bin/make
You have LWP 6.36
You have /bin/tar: tar (GNU tar) 1.28
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
Searching install () on cpanmetadb ...

########:/mnt/c/Projects$ env | grep HTTP_proxy
HTTP_proxy=http://####:###

【问题讨论】:

标签: perl lwp cpanm


【解决方案1】:

据我所知,cpanm(实际上App::Cpanminus 依赖于 HTTP::Tiny 来运行 HTTP 请求。

来自the docs of HTTP::Tiny

HTTP::Tiny 可以代理 http 和 https 请求。仅支持基本代理授权,并且必须作为代理 URL 的一部分提供:http://user:pass@proxy.example.com/

HTTP::Tiny 支持以下代理环境变量:http_proxy 或 HTTP_PROXY、https_proxy 或 HTTPS_PROXY、all_proxy 或 ALL_PROXY

因此,您应该尝试将代理用户名和密码指定为 url 的一部分,例如:

$ export HTTP_PROXY=http://<user>:<password>@<url>:<port>
$ export HTTPS_PROXY=http://<user>:<password>@<url>:<port>

此外,根据文档,LWP::UserAgent(cpan 命令行实用程序使用的主要 HTTP 客户端)接受 HTTP_PROXY 设置,而 curl 支持 HTTPS_PROXY(LWP 失败时 cpan 的回退)。请参阅the LWP::UserAgent docsthe curl docs

因此 HTTP_PROXY/HTTPS_PROXY 应该是所有 CPAN 客户端都支持的通用环境变量。

【讨论】:

  • 谢谢,我将这些设置在一个似乎可以正常工作的配置中,但让电线与 cpan/cpanm 交叉。参考文献似乎有不同的大写组合,这使得这具有挑战性。关于 CPAN 和/或 CPANM 与哪些环境变量接口的权威答案(这就是我引用源代码的原因)会很好。
  • @ffejrekaburb :我为答案添加了更多上下文。我注意到你在环境变量中混合了小写/大写,你可能应该避免这种情况
  • 谢谢,这越来越清楚了。 curl curl.haxx.se/libcurl/c/libcurl-env.html 的歧义似乎是 http_proxy 必须小写但接受 HTTPS_PROXY。当我们过渡到 HTTPS 时,看起来事情应该会简化,因为我们只需要 HTTPS_PROXY。我在想一些 cpan 安装程序可能会使用 curl?
  • @ffejrekaburb 是的,我认为 CPAN 使用 curl 作为 LWP 的替代品。因此,HTTPS_PROXY 应该是所有 CPAN 客户端都支持的通用设置。让我用这些信息更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 2021-04-14
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多