Thread overview | |||||
---|---|---|---|---|---|
|
October 03, 2019 allow response status codes with curl | ||||
---|---|---|---|---|
| ||||
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. How do I achieve this? |
October 03, 2019 Re: allow response status codes with curl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Hampus | 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. > > How do I achieve this? The HTTPStatusException class has a `.status` int member that contains the returned status code. Is that what you're looking for? https://dlang.org/library/std/net/curl/http_status_exception.html Also this thread belongs in the Learn forum. |
October 03, 2019 Re: allow response status codes with curl | ||||
---|---|---|---|---|
| ||||
Posted in reply to Hampus | 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."); } |
Copyright © 1999-2021 by the D Language Foundation