src/HTTPHandler.h
branchv_0
changeset 9 9fdbfbe24161
parent 8 3f4e60990393
child 11 6b913e82f52a
--- a/src/HTTPHandler.h	Tue Mar 15 01:47:05 2022 +0100
+++ b/src/HTTPHandler.h	Tue Mar 15 23:22:00 2022 +0100
@@ -148,18 +148,27 @@
 			request.headers.push_back(convertor.to_bytes(h.value));
 		}
 
-		HTTPClient::Response response = http->exchange(request);
-		relpipe::common::type::Integer responseCode = response.responseCode;
+		std::string body;
+		relpipe::common::type::Integer responseCode = -1;
+
+		try {
+			HTTPClient::Response response = http->exchange(request);
+			responseCode = response.responseCode;
+			body = response.body;
+
+			for (size_t i = 0; i < response.headers.size(); i += 2) {
+				responseHeaders.push_back(convertor.from_bytes(request.url));
+				responseHeaders.push_back(convertor.from_bytes(response.headers[i]));
+				responseHeaders.push_back(convertor.from_bytes(response.headers[i + 1]));
+			}
+		} catch (const HTTPClient::Exception& e) {
+			body = e.what();
+			// TODO: move error message into separate attribute?
+		}
 
 		relationalWriter->writeAttribute(value);
-		relationalWriter->writeAttribute(convertor.from_bytes(response.body));
+		relationalWriter->writeAttribute(convertor.from_bytes(body));
 		relationalWriter->writeAttribute(&responseCode, typeid (responseCode));
-
-		for (size_t i = 0; i < response.headers.size(); i += 2) {
-			responseHeaders.push_back(convertor.from_bytes(request.url));
-			responseHeaders.push_back(convertor.from_bytes(response.headers[i]));
-			responseHeaders.push_back(convertor.from_bytes(response.headers[i + 1]));
-		}
 	}
 
 public: