<div dir="ltr">Hi Drew,<div><br></div><div>Thanks, especially for the HTTPS links!</div><div><br></div><div>-Mark</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 10:18 PM, Drew Varner <span dir="ltr"><<a href="mailto:drew.varner@redops.org" target="_blank">drew.varner@redops.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Mark,<div><br></div><div>If you are communicating to servers via HTTPS, Hackney and other HTTP clients allow you to pass options to the underlying SSL/TLS socket, including some verification of the peer certificate. For example:<div><br></div><div><a href="https://github.com/talko/httpcbench/blob/master/src/httpcbench_client.erl#L79-L86" target="_blank">https://github.com/talko/httpcbench/blob/master/src/httpcbench_client.erl#L79-L86</a></div><div><br></div><div>Gun has an open issue to address this (<a href="https://github.com/extend/gun/pull/27" target="_blank">https://github.com/extend/gun/pull/27</a>), but it is not implemented. If you use Gun as your HTTPS client, you’re open to man-in-the-middle attacks.</div><div><br></div><div>Do not fall into a false sense of security that any Erlang HTTPS clients provide complete protection against man-in-the-middle attacks out of the box. You’ll also want to consider cases where your peer certificate was revoked by a Certificate Authority. You’d want to know how your HTTPS client handles certificates when their revocation data has been published via a CRL or OCSP. CRL verification has made some headway in Erlang (see the ssl module docs and <a href="http://erlang.org/doc/man/ssl.html" target="_blank">https://github.com/Vagabond/erl_crl_example</a>). You’ll also want to look at hostname verification (<a href="https://github.com/benoitc/ssl_verify_hostname" target="_blank">https://github.com/deadtrickster/ssl_verify_hostname.erl</a>). </div><div><br></div><div>HTTPS is as secure as you make it.</div><div><br></div><div>Felix mentioned ESL’s lhttpc repo. I’d take a look at Talko’s: <a href="https://github.com/talko/lhttpc" target="_blank">https://github.com/talko/lhttpc</a> It’s the underlying HTTP client for erlcloud.</div><div><br></div><div>Hackney also has nice multipart/form functionality.</div><div><br></div><div>Cheers,</div><div>Drew</div><div><div class="h5"><div><br></div><div><div><div><blockquote type="cite"><div>On Dec 12, 2014, at 3:45 PM, Mark Nijhof <<a href="mailto:mark.nijhof@cre8ivethought.com" target="_blank">mark.nijhof@cre8ivethought.com</a>> wrote:</div><br><div><div dir="ltr">I meant to mention Hackney. Why would you choose Hackney over Gun and vise verse?</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 9:27 PM, Alex Shneyderman <span dir="ltr"><<a href="mailto:a.shneyderman@gmail.com" target="_blank">a.shneyderman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">nobody mentioned hackney: well written, mature, filled with features. not to mention very active.</div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 3:17 PM, Mark Nijhof <span dir="ltr"><<a href="mailto:mark.nijhof@cre8ivethought.com" target="_blank">mark.nijhof@cre8ivethought.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Felix, <span style="font-size:13px">Iñaki</span>,<div><br></div><div>Thanks for your reply, you confirm what I was thinking myself about using Gun but I asked because of: </div><span><div><br></div><div>> <span style="font-size:13px">In general the state of http clients in erlang is a bewildering, overgrown thicket of ancient decaying masonry and beguiling dead ends filled with poisonous invisible gila monsters.</span></div><div><span style="font-size:13px"><br></span></div></span><div><span style="font-size:13px">Cheers,</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">-Mark</span></div><div><span style="font-size:13px"><br></span></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 9:03 PM, Felix Gallo <span dir="ltr"><<a href="mailto:felixgallo@gmail.com" target="_blank">felixgallo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">httpc has some weird bugs under load and should be retired from the standard distribution.<div><br></div><div>lhttpc is better but is a dead project and has a variety of forks, some of which are buggy or incomplete.  The 'esl' fork seems to be the closest although in my experience it seems to have a broken pooling mechanism.  Additionally it uses 'let it crash' for the common case of timeouts, which can fill up crash.log quickly and impede investigation into real issues.</div><div><br></div><div>dlhttpc is a fork of lhttpc that ferd put together to handle high volume requests to a low number of endpoints.  It's also not actively maintained, but ferd is still alive and kicking and has recently responded to pull requests there.  I intended on using this but rustled up my own nasty pool mechanism on top of my own hacked fork of lhttpc.</div><div><br></div><div>gun appears to be the most actively maintained; I haven't tried it yet but if it's as solid as cowboy, this is probably the right one to use for new projects.</div><div><br></div><div>shotgun is just an SSE convenience wrapper on gun, so if you don't need SSE, sticking with gun is probably your best bet.</div><div><br></div><div>fusco is an alpha quality http client that doesn't appear to be actively maintained.</div><div><br></div><div>In general the state of http clients in erlang is a bewildering, overgrown thicket of ancient decaying masonry and beguiling dead ends filled with poisonous invisible gila monsters.</div><span><font color="#888888"><div><br></div><div>F.</div><div><br></div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 11:44 AM, Iñaki Garay <span dir="ltr"><<a href="mailto:igarai@gmail.com" target="_blank">igarai@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">We love our tool shotgun[1], built on top of gun:<div><br></div><div>[1] <a href="https://github.com/inaka/shotgun" target="_blank">https://github.com/inaka/shotgun</a></div><div><br></div><div>It improves on gun's SSE support. </div><div><br></div><div>good luck, </div><div>Iñaki</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Fri, Dec 12, 2014 at 4:38 PM, Mark Nijhof <span dir="ltr"><<a href="mailto:mark.nijhof@cre8ivethought.com" target="_blank">mark.nijhof@cre8ivethought.com</a>></span> wrote:</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">Hi,<div><br></div><div>I am looking for the atm best solution to make http requests, from downloading a small file till larger (100mb) archives. I know of f.ex. the httpc, ibrowse, gun.</div><div><br></div><div>Any preferences? And why?</div><span><font color="#888888"><div><br></div><div>-Mark<br clear="all"><div><br></div>-- <br><div><div dir="ltr">Mark Nijhof<br><div><div>t:   <a href="https://twitter.com/MarkNijhof" target="_blank">@MarkNijhof</a><br>s:  marknijhof</div></div><div><br></div></div></div>
</div></font></span></div>
<br></div></div>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr">Mark Nijhof<br><div><div>t:   <a href="https://twitter.com/MarkNijhof" target="_blank">@MarkNijhof</a><br>s:  marknijhof</div></div><div><br></div></div></div>
</div>
</div></div><br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr">Mark Nijhof<br><div><div>t:   <a href="https://twitter.com/MarkNijhof" target="_blank">@MarkNijhof</a><br>s:  marknijhof</div></div><div><br></div></div></div>
</div>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br><a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br></div></blockquote></div><br></div></div></div></div></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Mark Nijhof<br><div><div>t:   <a href="https://twitter.com/MarkNijhof" target="_blank">@MarkNijhof</a><br>s:  marknijhof</div></div><div><br></div></div></div>
</div>