Как отключить или удалить параметр прокси в профиле клиента Erlang httpc по умолчанию после установки? - PullRequest
0 голосов
/ 05 марта 2019

Первоначально прокси не установлен и отображается как неопределенное:

httpc:get_options(all).
{ok,[{proxy,{undefined,[]}},
     {https_proxy,{undefined,[]}},
     {pipeline_timeout,0},
     {max_pipeline_length,2},
     {max_keep_alive_length,5},
     {keep_alive_timeout,120000},
     {max_sessions,2},
     {cookies,disabled},
     {verbose,false},
     {ipfamily,inet},
     {ip,default},
     {port,default},
     {socket_opts,[]},
     {unix_socket,undefined}]}

Я могу установить параметр прокси без проблем:

httpc:set_options([{proxy, {{"www-proxy.mycompany.com", 8000},["localhost"]}}]).

Как отключить прокси обратно, не неопределенный (или не прокси), когда он не нужен? Я попробовал:

httpc:set_options([{proxy,{undefined, []}}]).
But it throws an exception:
** exception throw: {error,{bad_option,proxy,{undefined,[]}}}
     in function  httpc:bad_option/2 (httpc.erl, line 1102)
     in call from httpc:validate_options/2 (httpc.erl, line 932)
     in call from httpc:validate_options/1 (httpc.erl, line 922)
     in call from httpc:set_options/2 (httpc.erl, line 236)

Что я делаю не так?

1 Ответ

2 голосов
/ 07 марта 2019

То, что вы делаете неправильно, это формат аргумента, который вы передаете функции. Правильный формат

httpc:set_options([{proxy, {{"", 0},[]}}]).

Теперь прокси-хост будет "": 0. Но я не знаю, приемлемо ли это для вашей задачи.

Ответ на комментарий: Попробуйте установить опцию 'proxy' прямо в http_manager, а не убивать его:

httpc_manager:set_options([{proxy,{undefined, []}}],httpc_manager).

Посмотрите на оболочку Эрланга:

1> inets:start().
ok
2> httpc:set_options([{proxy, {{"www-proxy.mycompany.com", 8000},["localhost"]}}]).
ok
3> httpc:get_options(all).
{ok,[{proxy,{{"www-proxy.mycompany.com",8000},
             ["localhost"]}},
     {https_proxy,{undefined,[]}},
     {pipeline_timeout,0},
     {max_pipeline_length,2},
     {max_keep_alive_length,5},
     {keep_alive_timeout,120000},
     {max_sessions,2},
     {cookies,disabled},
     {verbose,false},
     {ipfamily,inet},
     {ip,default},
     {port,default},
     {socket_opts,[]},
     {unix_socket,undefined}]}
4> httpc_manager:set_options([{proxy,{undefined, []}}],httpc_manager).
ok
5> httpc:get_options(all).                                            
{ok,[{proxy,{undefined,[]}},
     {https_proxy,{undefined,[]}},
     {pipeline_timeout,0},
     {max_pipeline_length,2},
     {max_keep_alive_length,5},
     {keep_alive_timeout,120000},
     {max_sessions,2},
     {cookies,disabled},
     {verbose,false},
     {ipfamily,inet},
     {ip,default},
     {port,default},
     {socket_opts,[]},
     {unix_socket,undefined}]}
...