C++ 为什么JsonCpp http客户端在201响应代码上失败?

C++ 为什么JsonCpp http客户端在201响应代码上失败?,c++,httpclient,blockchain,json-rpc,eos,C++,Httpclient,Blockchain,Json Rpc,Eos,使用库,我正在使用创建EOS钱包 我发现HttpClient接收到一个201响应代码。我不知道如何避免这个例外。有人知道吗?201基本上表示您的请求已成功处理。正如所解释的那样: 201创建请求已完成,并导致创建一个或多个新资源。 由请求创建的主资源由 响应中的位置标题字段,或者,如果没有位置字段 通过有效的请求URI接收 201响应有效负载通常描述和链接到 已创建资源。请参阅RFC7231第7.2节,了解对 验证程序头字段的含义和用途,如ETag和 最后修改,在201响应中 对响应数据应用任何

使用库,我正在使用创建EOS钱包


我发现
HttpClient
接收到一个201响应代码。我不知道如何避免这个例外。有人知道吗?

201
基本上表示您的请求已成功处理。正如所解释的那样:

201创建请求已完成,并导致创建一个或多个新资源。 由请求创建的主资源由 响应中的位置标题字段,或者,如果没有位置字段 通过有效的请求URI接收

201响应有效负载通常描述和链接到 已创建资源。请参阅RFC7231第7.2节,了解对 验证程序头字段的含义和用途,如ETag和 最后修改,在201响应中

对响应数据应用任何进一步处理时,必须引发异常。

如果没有更多的信息,我无法确切地说出这是什么原因。

201
基本上意味着您的请求已成功处理。正如所解释的那样:

201创建请求已完成,并导致创建一个或多个新资源。 由请求创建的主资源由 响应中的位置标题字段,或者,如果没有位置字段 通过有效的请求URI接收

201响应有效负载通常描述和链接到 已创建资源。请参阅RFC7231第7.2节,了解对 验证程序头字段的含义和用途,如ETag和 最后修改,在201响应中

对响应数据应用任何进一步处理时,必须引发异常。
如果没有更多的信息,我无法确切地说是什么原因造成的。

这个问题是由
HttpClient::SendRPCMessage()
实现中的一个错误引起的。 在内部,使用libcurl进行HTTP处理,在
SendRPCMessage()
实现的最后,检查
curl\u easy\u perform()
是否成功:

long http_code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);

if (http_code != 200) {
  throw JsonRpcException(Errors::ERROR_RPC_INTERNAL_ERROR, result);
}
如您所见,
SendRPCMessage()
会对除200以外的任何HTTP响应代码引发异常。但是,所有2xx响应代码都表示成功,而不仅仅是200。在这种情况下,指:

10.2.2 201已创建

请求已完成,并导致创建新资源。新创建的资源可由响应实体中返回的URI引用,其中位置标头字段给出了资源的最特定URI。响应应包括一个实体,其中包含资源特征和位置列表,用户或用户代理可从中选择最合适的一个。实体格式由内容类型标题字段中给定的媒体类型指定。源服务器必须在返回201状态代码之前创建资源。如果无法立即执行该操作,则服务器应改为使用202(已接受)响应

201响应可能包含ETag响应头字段,该字段指示刚刚创建的请求变量的实体标记的当前值,请参阅

这显然是
SendRPCMessage()
实现中的一个逻辑错误。对http_代码的检查应该更像这样:

if ((http_code / 100) != 2)
这将把所有2xx响应代码视为成功

我已经向json rpc cpp的作者提交了一份错误报告:

该问题是由
HttpClient::SendRPCMessage()实现中的错误引起的。
。 在内部,使用libcurl进行HTTP处理,在
SendRPCMessage()
实现的最后,检查
curl\u easy\u perform()
是否成功:

long http_code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);

if (http_code != 200) {
  throw JsonRpcException(Errors::ERROR_RPC_INTERNAL_ERROR, result);
}
如您所见,
SendRPCMessage()
会对除200以外的任何HTTP响应代码引发异常。但是,所有2xx响应代码都表示成功,而不仅仅是200。在这种情况下,指:

10.2.2 201已创建

请求已完成,并导致创建新资源。新创建的资源可由响应实体中返回的URI引用,其中位置标头字段给出了资源的最特定URI。响应应包括一个实体,其中包含资源特征和位置列表,用户或用户代理可从中选择最合适的一个。实体格式由内容类型标题字段中给定的媒体类型指定。源服务器必须在返回201状态代码之前创建资源。如果无法立即执行该操作,则服务器应改为使用202(已接受)响应

201响应可能包含ETag响应头字段,该字段指示刚刚创建的请求变量的实体标记的当前值,请参阅

这显然是
SendRPCMessage()
实现中的一个逻辑错误。对http_代码的检查应该更像这样:

if ((http_code / 100) != 2)
这将把所有2xx响应代码视为成功

我已经向json rpc cpp的作者提交了一份错误报告: