Merge pull request #321 from FireMario211/patch-1

Handle HTTP error responses
This commit is contained in:
alk 2023-10-28 18:47:23 +03:00 committed by GitHub
commit b708d1ecf6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -271,7 +271,7 @@ SentAsyncWebRequest::Impl::Impl(SentAsyncWebRequest* self, AsyncWebRequest const
// Follow redirects // Follow redirects
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
// Fail if response code is 4XX or 5XX // Fail if response code is 4XX or 5XX
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 0L); // we will handle http errors manually
// Headers end // Headers end
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
@ -307,12 +307,17 @@ SentAsyncWebRequest::Impl::Impl(SentAsyncWebRequest* self, AsyncWebRequest const
); );
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &data); curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &data);
auto res = curl_easy_perform(curl); auto res = curl_easy_perform(curl);
long code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
if (res != CURLE_OK) { if (res != CURLE_OK) {
long code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
return this->error("Fetch failed: " + std::string(curl_easy_strerror(res)), code); return this->error("Fetch failed: " + std::string(curl_easy_strerror(res)), code);
} }
if (code >= 400 && code < 600) {
std::string response_str(ret.begin(), ret.end());
curl_easy_cleanup(curl);
return this->error(response_str, code);
}
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
AWAIT_RESUME(); AWAIT_RESUME();