<div dir="ltr"><br><br><div class="gmail_quote">On Sun, Apr 19, 2015 at 6:14 PM John Duffy <<a href="mailto:jb_duffy@btinternet.com">jb_duffy@btinternet.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br>-module(streaming).<br><br></blockquote><div><br></div><div>[...]</div><div><br></div><div>You are pretty close to the goal, but you are confusing the stream/receiver options I think. In streaming, you will receive the data as a series of chunks, which is what your code expect, but you don't supply an option requesting streaming operation. So you don't retrieve an expected tuple. You can add a catchall tuple to your receieve clause in receive_data/1 to make sure you have the right format in your match. Also, you can add a 'after' clause to time out after a while. This can make debugging easier since you "get back" to the the REPL.</div><div><br></div><div>The following works on a quick test in my end. Note how the receive clause is different from yours, and that you get everything in one fell swoop, rather than having to match on a multitude of clauses.</div><div><br></div><div>For more serious work, you might want to check out some of the numerous other projects for HTTP client requests. I'm partial to Gun and Hackney myself, but there are also ibrowse, lhttpc and fusco. They have slightly different semantics and areas at which they excel, so choose wisely :)</div><div><br></div><div>For a prototype however, I think httpc is fine.</div><div><br></div><div>-module(streaming).</div><div><br></div><div>-export([data/0]). </div><div><br></div><div>data() -></div><div>    {ok, RequestId} = httpc:request(get, {"<a href="http://example.com">example.com</a>", []}, [], [{sync, false}, {receiver, self()}]),</div><div>    receive_data(RequestId).</div><div><br></div><div>receive_data(RequestId) -></div><div>    receive</div><div>        {http, {RequestId, {StatusLine, Headers, Body}}} -></div><div>            error_logger:info_report(</div><div>            <span class="Apple-tab-span" style="white-space:pre">  </span>#{</div><div>            <span class="Apple-tab-span" style="white-space:pre"> </span>  status => StatusLine,</div><div>            <span class="Apple-tab-span" style="white-space:pre">        </span>  headers => length(Headers),</div><div>            <span class="Apple-tab-span" style="white-space:pre">  </span>  body_size => byte_size(Body)</div><div>            <span class="Apple-tab-span" style="white-space:pre"> </span> }),</div><div>            ok</div><div>    after 5000 -></div><div>            error_logger:info_report(timeout)</div><div>    end.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
</blockquote></div></div>