erlanghttp-proxyhttpc

How to unset or remove the proxy option on Erlang httpc client default profile once set?


The proxy originally is not set and shown as undefined:

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}]}

I'm able to set the proxy option without problem:

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

How do you unset the proxy back not undefined (or no proxy) when it is not needed? I tried:

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)

What am I doing wrong?


Solution

  • What you are doing wrong that is argument format you pass to the function. Right format is

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

    Now proxy host will be "":0. But I do not know is it acceptable for your task.

    Response to comment: Try to set 'proxy' option directly to http_manager instead of kill him:

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

    Look at erlang shell:

    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}]}