2016-09-25 3 views
1

arbeiten Dies ist mein erstes Mal mit Erlang und ich entschied mich zu versuchen, einen Wrapper für eine API zu schreiben. Hier ist, was ich habe, so weit: -Kann httpc grundlegende Auth-Beispiel nicht mit https

  -module(my_api_wrapper). 

      %% API exports 
      -export([auth/0]). 

      auth() -> 
       application:start(inets), 
       application:start(ssl), 
       AuthStr = base64:encode_to_string("username:password"), 

       Method = post, 
       URL = "https://api.endpoint.com/auth", 
       Header = [{"Authorization", "Basic " ++ AuthStr}], 
       Type = "application/json", 
       Body = "{\"grant_type\":\"client_credentials\"}", 
       HTTPOptions = [], 
       Options = [], 
       httpc:request(Method, {URL, Header, Type, Body}, HTTPOptions, Options). 

Wenn diese Prüfung an der Shell ich einen Fehler: -

{error,{failed_connect,[{to_address,{"api.endpoint.com", 
           443}}, 
        {inet,[inet],closed}]}} 

ich kann nicht herausfinden, was ich hier falsch mache! Ich benutze diese Version Erlang/OTP 19 [erts-8.0.2]. Jede Hilfe wird geschätzt.

+3

Ist die Antwort auf diese Frage helfen: http://stackoverflow.com/questions/38620111/connection-closed-strange-error-unable-to-connect-from-erlang-vm-to-certain- h? – Dogbert

+0

Ja! Das hat mir geholfen, es zu reparieren. Danke für Ihre Hilfe! – overture8

+2

Ein allgemeiner Tipp: Ich würde empfehlen, '{ok, _} = application: ensure_all_started (ssl)' - OTP zu bitten, die Anwendungsabhängigkeiten zu behandeln und sicherzustellen, dass die Anwendung tatsächlich gestartet wurde. –

Antwort

0

Für alle, denen es helfen könnte - hier ist genau was ich geändert habe, um den Code in meiner ursprünglichen Frage funktionieren zu lassen - danke an Dogbert für seinen Kommentar oben.

 -module(my_api_wrapper). 

     %% API exports 
     -export([auth/0]). 

     auth() -> 
      application:start(inets), 
      application:start(ssl), 
      AuthStr = base64:encode_to_string("username:password"), 

      Method = post, 
      URL = "https://api.endpoint.com/auth", 
      Header = [{"Authorization", "Basic " ++ AuthStr}], 
      Type = "application/json", 
      Body = "{\"grant_type\":\"client_credentials\"}", 
      % ADD SSL CONFIG BELOW! 
      HTTPOptions = [{ssl,[{versions, ['tlsv1.2']}]}], 
      Options = [], 
      httpc:request(Method, {URL, Header, Type, Body}, HTTPOptions, Options). 
Verwandte Themen