On Friday, 14 February 2020 at 00:24:27 UTC, Gregor Mückl wrote:
Hi!

I am trying to write a client for pretty... well... creatively designed web API. The server gives HTTP status 500 replies if the requests are malformed, but the actual error message is hidden in the body of the reply (an XML document!). std.net.curl.get() throws an exception in this case. But I would like to get the body to process the error message within. How can I do that?

Thanks in advance,
Gregor

It seems you can't, that simple get wrapper is very limited.
Better create you own get function, example:

import std;

ushort get(string url, ref ubyte[] content)
{
    auto cont = appender(&content);
    auto http = HTTP();
    http.method = HTTP.Method.get;
    http.url = url;
    http.onReceive = (ubyte[] data)
    {
        cont ~= data;
        return data.length;
    };
    HTTP.StatusLine status;
http.onReceiveStatusLine = (HTTP.StatusLine s) { status = s; };
    http.perform();
    return status.code;
}

void main()
{
    ubyte[] data;
    auto scode = get("http://dlang.org/asdf";, data);
    if (scode == 404)
    {
    // data has the body
    ...
}

Reply via email to