www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - allow response status codes with curl

reply Hampus <hampros2 gmail.com> writes:
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\s
d\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?
Oct 02 2019
next sibling parent Anonymouse <zorael gmail.com> writes:
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\s
d\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.
Oct 02 2019
prev sibling parent Boris Carvajal <boris2.9 gmail.com> writes:
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\s
d\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."); }
Oct 02 2019