curl-library
[PATCH] http: print reason phrase from HTTP status line on error
From: Kamil Dudka <kdudka_at_redhat.com>
Date: Fri, 20 Jul 2012 13:59:39 +0200
Date: Fri, 20 Jul 2012 13:59:39 +0200
Bug: https://bugzilla.redhat.com/676596
--- RELEASE-NOTES | 2 ++ lib/http.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index bb26424..26921dc 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -19,6 +19,7 @@ This release includes the following changes: o pop3: Added support for apop authentication o Added support for Schannel (Native Windows) SSL/TLS encryption [2] o Added support for Dwarin SSL (Native Mac OS X and iOS) [6] + o http: print reason phrase from HTTP status line on error [8] This release includes the following bugfixes: @@ -68,3 +69,4 @@ References to bug reports and discussions on issues: [5] = http://daniel.haxx.se/blog/2012/06/03/curling-the-metalink/ [6] = http://daniel.haxx.se/blog/2012/06/28/darwin-native-ssl-for-curl/ [7] = http://daniel.haxx.se/blog/2012/07/08/curls-new-http-cookies-docs/ + [8] = https://bugzilla.redhat.com/676596 diff --git a/lib/http.c b/lib/http.c index b421a2c..fd3999d 100644 --- a/lib/http.c +++ b/lib/http.c @@ -2726,6 +2726,36 @@ static CURLcode header_append(struct SessionHandle *data, return CURLE_OK; } +static void print_http_error(struct SessionHandle *data) +{ + struct SingleRequest *k = &data->req; + char *beg = k->p; + + /* make sure that data->req.p points to the HTTP status line */ + if(!strncmp(beg, "HTTP", 4)) { + + /* skip to HTTP status code */ + beg = strchr(beg, ' '); + if(beg && *++beg) { + + /* find trailing CR */ + char *end = strchr(beg, '\r'); + if(end) { + + /* temporarily replace CR by NUL and print the error message */ + *end = '\0'; + failf(data, "The requested URL returned error: %s", beg); + + /* restore the previously replaced CR */ + *end = '\r'; + return; + } + } + } + + /* fall-back to printing the HTTP status code only */ + failf(data, "The requested URL returned error: %d", k->httpcode); +} /* * Read any HTTP header lines from the server and pass them to the client app. @@ -3114,8 +3144,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data, } else { /* serious error, go home! */ - failf (data, "The requested URL returned error: %d", - k->httpcode); + print_http_error(data); return CURLE_HTTP_RETURNED_ERROR; } } -- 1.7.1 ------------------------------------------------------------------- List admin: http://cool.haxx.se/list/listinfo/curl-library Etiquette: http://curl.haxx.se/mail/etiquette.htmlReceived on 2012-07-20