<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="208688" data-post-id="208688">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="voltone" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/voltone/120/24672_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  voltone
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Another thing to look at is whether a client handles TLS securely out-of-the-box. If it doesn’t, then you are going to have to do the <a href="https://erlef.github.io/security-wg/secure_coding_and_deployment_hardening/ssl" rel="noopener nofollow ugc">ssl options dance</a>.</p>
<p>Mint-based clients, including Finch, Mojito, and Tesla with the appropriate adapter, should handle that just fine.</p>
<p>Hackney, and by extension HTTPoison and Tesla with the Hackney adapter, do check the server certificate by default. However, if you want to start tuning the TLS options, e.g. to disable old TLS versions, you are going to have to set all the necessary options yourself:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"># This fails, as expected:
iex(1)&gt; HTTPoison.get("https://expired.badssl.com/")                                   
{:error,
 %HTTPoison.Error{
   id: nil,
   reason: {:tls_alert,
    {:certificate_expired,
     'TLS client: In state certify at ssl_handshake.erl:1764 generated CLIENT ALERT: Fatal - Certificate Expired\n'}}
 }}
# But this succeeds while it shouldn't:
iex(2)&gt; HTTPoison.get("https://expired.badssl.com/", [], ssl: [versions: [:"tlsv1.2"]])
{:ok,
 %HTTPoison.Response{...}}
</code></pre>
<p>Other clients, such as httpc, gun and ibrowse, leave it completely up to you. For instance, Tesla with the default httpc adapter:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">iex(3)&gt; Tesla.get("https://expired.badssl.com/")                    
{:ok,
 %Tesla.Env{...}}
</code></pre>
<p>I would highly recommend you test your choice of HTTP client against some <a href="https://badssl.com" rel="noopener nofollow ugc">https://badssl.com</a> endpoints, using the specific configuration (adapter, ssl options) you intend to use, so you can be confident your application gets the TLS protections you expect.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208688" data-batch-url="/posts/batch_likers">
                        16
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-208688" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208688"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="208700" data-post-id="208700">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tangui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/120/12091_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tangui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If you’re a library author you might also consider using Tesla for outbound HTTP requests to not force an HTTP library upon the library user, and let him choose the adapter he wants. Beware, however, the default Tesla adapter is <code>httpc</code> which is insecure (it makes TLS requests without verifying anything), so you have to document it correctly.</p>
<p>There are also some things that are not possible with Tesla. For example, I recently had to proxy some big log files through a Phoenix app. As far as I know, streaming the HTTP response directly to <code>%Plug.Conn{}</code> is not possible with Tesla, so I used Mint instead. HTTPoison <a href="https://hexdocs.pm/httpoison/readme.html#async-requests" rel="noopener nofollow ugc">supports it</a> as well.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208700" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-208700" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208700"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="208704" data-post-id="208704">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mcrumm" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mcrumm/120/23032_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mcrumm
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Phoenix Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="tangui" data-post="13" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/48/12091_2.png" class="avatar"> tangui:</div>
<blockquote>
<p>library author you might also consider using Tesla for outbound HTTP requests to not force an HTTP library upon the library user</p>
</blockquote>
</aside>
<p>Hi, library author here who chose to use an existing package based on Tesla. If I could go back and do it again, I would not do that. Here’s why:</p>
<ul>
<li>
<p>First, because it’s abstractions on abstractions on abstractions.</p>
</li>
<li>
<p>Tesla was not originally designed with this level of customizability from outside the client (read: library), so it doesn’t cater to the end-user in that regard, anyway.</p>
</li>
<li>
<p>The design of Mint/finch, which are awesome, is different enough to require changes to the abstractions itself, which I suppose is really more of a refinement of my first point.</p>
</li>
</ul>
<p>So I’m firmly in the Mint/finch camp. Insofar as package authors want to make http clients more extensible, great.</p>
<p>Finally, this is a diverse community of language and library users, and one small way we can demonstrate inclusivity is by not applying a gender to the community at large <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208704" data-batch-url="/posts/batch_likers">
                        10
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-208704" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208704"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="208707" data-post-id="208707">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tangui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/120/12091_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tangui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Library author also and I’m not sure I’m getting your point here <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>Say you write a library and you need to refresh some keys periodically (<a href="https://www.googleapis.com/oauth2/v3/certs" rel="noopener nofollow ugc">https://www.googleapis.com/oauth2/v3/certs</a> for instance). Erlang’s httpc is out of question, because TLS, so you need to pick another library. Using Tesla allows not forcing a specific library upon the user. This is basically what I’m doing with <a href="https://hexdocs.pm/jwks_uri_updater/readme.html" rel="noopener nofollow ugc">JWKSURIUpdater</a> for instance.</p>
<p>What would be your approach instead? Maybe you meant it for other use-cases, when you need better performances or features not available in Tesla? Feel free to be more specific, I’m interested in what others do to deal with this problem.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208707" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-208707" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208707"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="208708" data-post-id="208708">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="tangui" data-post="15" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/48/12091_2.png" class="avatar"> tangui:</div>
<blockquote>
<p>Using Tesla allows not forcing a specific library upon the user. This is basically what I’m doing with <a href="https://hexdocs.pm/jwks_uri_updater/readme.html" rel="noopener nofollow ugc">JWKSURIUpdater</a> for instance.</p>
</blockquote>
</aside>
<p>And now you allow the user to shoot himself on the foot more easily <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>I say this because secure http in the BEAM is a very old implementation that http libraries abstract away from you, but then its so easy for the end user to screw everything up when customizing it:</p>
<aside class="quote no-group" data-username="voltone" data-post="12" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/voltone/48/24672_2.png" class="avatar"> voltone:</div>
<blockquote>
<p>Another thing to look at is whether a client handles TLS securely out-of-the-box. If it doesn’t, then you are going to have to do the <a href="https://erlef.github.io/security-wg/secure_coding_and_deployment_hardening/ssl" rel="noopener nofollow ugc">ssl options dance </a>.</p>
</blockquote>
</aside>
<p>In my opinion I would stick with a specific library, and build a wrapper around it to ensure that the user doesn’t shoot himself on the foot when passing custom settings.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208708" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-208708" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208708"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="208711" data-post-id="208711">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tangui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/120/12091_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tangui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Exadra37" data-post="16" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/exadra37/48/9183_2.png" class="avatar"> Exadra37:</div>
<blockquote>
<p>And now you allow the user to shoot himself on the foot more easily <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>Not if you default to a secure adapter when building the Tesla client:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  defp tesla_adapter(), do: Application.get_env(:tesla, :adapter, Tesla.Adapter.Hackney)
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208711" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-208711" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208711"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="208712" data-post-id="208712">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="tangui" data-post="17" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/48/12091_2.png" class="avatar"> tangui:</div>
<blockquote>
<p>Not if you default to a secure adapter when building the Tesla client:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  defp tesla_adapter(), do: Application.get_env(:tesla, :adapter, Tesla.Adapter.Hackney)
</code></pre>
</blockquote>
</aside>
<p>But the end user of the library can override this, correct?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208712" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-208712" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208712"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="208795" data-post-id="208795">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mindreader" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mindreader/120/19278_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mindreader
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>We use httpoison, but its use of hackney has continually bitten us badly.  It is very temperamental and we’ve had random failures due to slightly out of the ordinary cert chains, poorly configured servers, on top of OTP related https bugs.</p>
<p>I’ve looked at tesla but most of its backends that are not hackney seem do not even verify the ssl cert?</p>
<p>We’ve actually started just wrapping the curl library.  It uses the system certificate store, it supports everything, it has retries and exponential backoff, location redirects, streaming the file to disk (which is important so as not to run out of memory when manipulating audio files), a whole lot of other options, and it never, ever fails.</p>
<p>I just wish someone had made a library for this so that we didn’t have to write our own.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208795" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-208795" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208795"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="208818" data-post-id="208818">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dch" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dch/120/2682_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dch
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>like <a href="https://github.com/puzza007/katipo" class="inline-onebox" rel="noopener nofollow ugc">GitHub - puzza007/katipo: HTTP2/HTTP3 client for Erlang based on libcurl and libevent · GitHub</a> or a different one?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208818" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-208818" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208818"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="208819" data-post-id="208819">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mindreader" data-post="19" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mindreader/48/19278_2.png" class="avatar"> mindreader:</div>
<blockquote>
<p>We’ve actually started just wrapping the curl library. It uses the system certificate store, it supports everything, it has retries and exponential backoff, location redirects, streaming the file to disk (which is important so as not to run out of memory when manipulating audio files), a whole lot of other options, and it never, ever fails.</p>
<p>I just wish someone had made a library for this so that we didn’t have to write our own.</p>
</blockquote>
</aside>
<p>Are you planning to share it?</p>
<aside class="quote no-group" data-username="mindreader" data-post="19" data-topic="38588">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mindreader/48/19278_2.png" class="avatar"> mindreader:</div>
<blockquote>
<p>I’ve looked at tesla but most of its backends that are not hackney seem do not even verify the ssl cert?</p>
</blockquote>
</aside>
<p>Yes, at least for the default <code>:httpc</code> backend.</p>
<p><a href="https://github.com/teamon/tesla/issues/293" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/teamon/tesla/issues/293</a></p>
<p>I have open it in 2019, but still not solved, and I even got downvoted because of a recent comment I made.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="208819" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/mint-vs-finch-vs-gun-vs-tesla-vs-httpoison-etc/38588/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-208819" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="208819"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/38588/load_more?page=3">Load more posts (10 remaining)</a>
</div></template></turbo-stream>