我正在使用带有Robospice(1.4.14)的Revovit(1.6.1)从一些服务中获取数据(响应应该在JSON中)。
在某些情况下,我可能会收到一个HTML错误页面,而不是一个JSON响应。服务器返回一个200状态代码,我不能改变它。在这种情况下,RoboSpice将调用OnRequestFailure(SpiceException)
方法。
在那里,我可以获得原始的retrofiterror
expetion,但正文是null
。我是这样得到的:
if (spiceException.getCause() instanceof RetrofitError) {
RetrofitError error = (RetrofitError) spiceException.getCause();
error.getBody(); // returns null
}
在研究了reverfit的源代码之后,我发现如果转换失败(这里就是这种情况,因为reverfit期望JSON并接收HTML),那么主体将被替换为null
。
RestAdapter
中的以下一行是我的问题的来源:
response = Utils.replaceResponseBody(response, null);
有没有办法不将正文设置为null
?在另一个SO问题中,我发现如果服务器返回4xx,主体将被保留,但我不能改变这一点。
您可能应该创建一个改进型方法,该方法将只返回reverfit.client.response
,如果响应主体的格式是必需的,则手动调用转换。
您的改装界面:
...
@GET("/foo/bar")
Response fooBarMethod(Object foo, Object bar);
...
您的RoboSpice请求:
...
@Override
public final FooBar loadDataFromNetwork() throws Exception {
Response r = getService().fooBarMethod(foo, bar);
if (isBodyInHtmlFormat()) {
// cool stuff
throw new ResponseIsHtmlException();
} else {
// it is wise to make sure that it is
// exactly the same converter you are passing to
// your RetrofitSpiceService
Converter converter = createGsonConverter();
return (FooBar) converter.fromBody(response.getBody(), FooBar.class);
}
}
我是iOS和Swift的新手,我正在尝试使用AlamoFire3.4.0来做一个web请求。当我的请求成功时,一切都很好。但是,如果我的请求失败,服务器将返回300或更大的状态代码,以及响应体中的一些JSON,其中包含关于请求失败原因的更多信息。例如,我正在与之交谈的API要求对每个请求进行身份验证。如果身份验证由于某种原因失败,我将返回401,响应体中的JSON将为: 我发出此请求的代码如下所示
我在Alamofire 5.3中收到了大量失败的请求,其中响应对象本身为nil,或者错误为“无法解析响应”。我可以从服务器日志中看到,所有这些请求都返回有效。 这是我的设置: API管理器类: AccessTokenInterceptor: 这个拦截器从插入我的授权令牌 我也使用标准路由器的URL刚需转换,编码是通过JSON序列化(字典)或可编码协议(对象) 奇怪的是,我不认为我在做任何不同于我使
我正试图通过改型2获得原始响应。0.2. 到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。 日志i(“原始消息”,response.body()。toString());
问题内容: 尝试在Python中获取HTTP响应内容的原始数据。我有兴趣通过另一个渠道转发响应,这意味着理想情况下,内容应尽可能原始。 什么是做到这一点的好方法? 问题答案: 如果使用呼叫获取HTTP响应,则可以使用响应的属性。这是docs中的代码。
问题内容: 有什么方法可以获取原始响应的HTTP标头? 该方法对我不起作用,因为服务器吐出了多个“ Set-Cookie”,其中一些丢失了。 问题答案: 该方法对我不起作用 您是在的情况下问这个的吗?不可以,无法使用原始HTTP响应标头。您需要退回到低级的Socket编程。这是一个SSCCE,只需复制“ 粘贴 ”即可运行它。 为了避免每个尝试此代码片段的人都使SO过载,输出如下所示: 要了解有关以
我使用拦截器设置请求的头,如下所示: 并且一切按预期工作(服务器看到并接受)。 我的问题是,当响应到来时,我想在我的应用程序中读取这些标题。 我使用,但总是返回一个空的String[]。所有其他属性(url、params、verb)都可以访问,只有标头丢失了。 我在请求头中设置了一个键,基本上我想在收到响应时检查这个键。 有没有线索为什么标头不可见以及如何在中获取它们?