On Thursday, 3 October 2019 at 01:02:43 UTC, Hampus wrote:
I have a program that is using std.curl and right now if a http request returns a status code other than 200 the program will crash like this:

std.net.curl.HTTPStatusException@C:\D\dmd2\windows\bin\..\..\src\phobos\std\net\curl.d(1082):
 HTTP request returned status code 404 (Not Found)

What I want to do is allow certain stauts codes and I want my program to keep going if it receives for example 404 or 500 but raise an exception for lets say status code 403.

First: You post in the wrong forum section.


How do I achieve this?

Catch that exception then do whatever you want, as in this code:

import std;

void main()
{
    try {
        get("dlang.org/aaaaaaaaaaa");
    }
    catch(CurlException ce)
    {
        if(auto e = cast(HTTPStatusException) ce)
        {
            if (e.status.among(403, 444))
throw new Exception("bad status, ending program.");

            if (e.status.among(404, 500))
writeln("request with status: ", e.status, ", but keep going.");
        }
        else if(auto e = cast(CurlTimeoutException) ce)
        {
            // TODO: implement retry
        }
        else {
            writeln(ce.msg);
        }
    }

    writeln("program finished.");
}

Reply via email to