Как cpanm получить настройки для прокси, для которого требуется имя пользователя и пароль

Я работаю с CPANM для взаимодействия с прокси-сервером, для которого требуется имя пользователя и пароль. Я указал настройки при запуске «o conf init /proxy/ под 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://####:###

person ffejrekaburb    schedule 30.11.2018    source источник


Ответы (1)


Насколько я понимаю, cpanm (на самом деле App::Cpanminus) полагается на HTTP:: Tiny для выполнения HTTP-запросов.

Из документации HTTP::Tiny:

HTTP::Tiny может проксировать как http, так и https запросы. Поддерживается только базовая авторизация прокси-сервера, и она должна быть предоставлена ​​как часть URL-адреса прокси-сервера: http://user:[email protected]/.

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>

Кроме того, согласно документации, параметр HTTP_PROXY принимается LWP::UserAgent (основной HTTP-клиент, используемый утилитой командной строки cpan), в то время как HTTPS_PROXY поддерживается curl (запасной вариант cpan при сбое LWP). См. документацию LWP::UserAgent и документы curl.

Следовательно, HTTP_PROXY/HTTPS_PROXY должны быть общими переменными среды, которые поддерживаются всеми клиентами CPAN.

person GMB    schedule 30.11.2018
comment
Спасибо, у меня есть эти наборы в одной конфигурации, которая, кажется, работает, но пересекает провода с cpan/cpanm. Ссылки, похоже, имеют разные комбинации заглавных букв, что усложняет задачу. Было бы неплохо получить авторитетный ответ (именно поэтому я сослался на исходный код) о том, с какими переменными среды взаимодействуют CPAN и/или CPANM. - person ffejrekaburb; 01.12.2018
comment
@ffejrekaburb: я добавил в ответ больше контекста. Я заметил, что вы смешиваете нижний и верхний регистры в env vars, вам, вероятно, следует избегать этого - person GMB; 01.12.2018
comment
Спасибо, это становится яснее. Неоднозначность кажется http_proxy для curl curl.haxx.se/libcurl/c/ libcurl-env.html должен быть в нижнем регистре, но принимает HTTPS_PROXY. Когда мы перейдем на HTTPS, похоже, все должно упроститься, так как нам понадобится только HTTPS_PROXY. Я думаю, что некоторые программы установки cpan могут использовать curl? - person ffejrekaburb; 03.12.2018
comment
@ffejrekaburb да, я думаю, что CPAN использует curl как альтернативу LWP. Следовательно, HTTPS_PROXY должен быть общей настройкой, которую поддерживают все клиенты CPAN. Позвольте мне обновить мой ответ этой информацией. - person GMB; 03.12.2018