in binding-cpp/gym_binding.cpp [170:196]
void throw_server_error_or_response_code(const std::string& answer, Json::Value& j)
{
long response_code;
CURLcode r = curl_easy_getinfo(h.get(), CURLINFO_RESPONSE_CODE, &response_code);
if (r) throw std::runtime_error(curl_error_buf.data());
if (verbose) printf("%i\n%s\n", (int)response_code, answer.c_str());
std::string parse_error;
Json::Reader jr;
if (!jr.parse(answer, j, false)) {
parse_error = jr.getFormattedErrorMessages();
parse_error += "original json that caused error: " + answer;
} else if (!j.isObject()) {
parse_error = "top level json is not an object";
parse_error += "original json that caused error: " + answer;
}
if (response_code != 200 && j.isObject() && j.isMember("message")) {
throw std::runtime_error(j["message"].asString());
} else if (response_code != 200) {
throw std::runtime_error("bad HTTP response code, and also cannot parse server message: " + answer);
} else {
// 200, but maybe invalid json
if (!parse_error.empty())
throw std::runtime_error(parse_error);
}
}