On Saturday, 15 February 2020 at 16:25:42 UTC, Gregor Mückl wrote:
Unfortunately, this is not true. The msg only contains the text
information in the status line of the HTTP reply. If I'm not
mistaken, the exception is created in this line in
std/net/curl.d:
enforce(statusLine.code / 100 == 2, new
HTTPStatusException(statusLine.code,
format("HTTP request returned status code %d (%s)",
statusLine.code, statusLine.reason)));
If anything is wrong, the server I'm interested in tends to
reply with a status code 500 and a generic status line text and
a bloated XML body containing the actual error message.
Not that it answers your question but requests[1] can do this, if
you don't mind adding some dependencies.
Request req;
Response res = req.get(urlRespondingWith500);
assert(res.code == 500);
writeln(res.responseBody); // Buffer!ubyte; use .to!string to
get a string
When testing to confirm I ran into a bug[2] where the body is
sometimes empty, but outside of fringe cases it should work.
[1]: https://code.dlang.org/packages/requests
[2]: https://github.com/ikod/dlang-requests/issues/115