如何在Android中使用Retrofit获取头部响应?

5
这是我的终端点:
@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);

我正在尝试获取以下响应:

我正在尝试获取以下响应:

requestService.requestStore(request)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.computation())
                .map(headers -> {
                   Log.d("Response",""+headers);
                    return headers;
                }).subscribe(headers -> {
                            Log.d("Response",""+headers);
                        },
                        error -> {
                           Log.d("ERRRROOOR","Error");
                        });

我遇到了以下错误:

Exception: retrofit2.adapter.rxjava.HttpException: HTTP 403 Forbidden

在Postman中,我得到了响应:

Connection →keep-alive
Content-Length →0
Content-Type →application/json; charset=utf-8
Date →Mon, 03 Sep 2018 18:47:30 GMT
MYid →f028df50-c8c5-4cce-92e7-70130345ba46

这里我做错了什么?

你是在你的WAMP服务器上尝试这个吗? - Ümañg ßürmån
好的,有人会帮助你解决这个问题。祝一切顺利。 - Ümañg ßürmån
@UmangBurman 我也遇到了“this不可用”的问题。 - Anil Thakur
是的,Postman被构建用于处理这种情况,它会自动应用必要的条件。熟悉SQLServer的人肯定会知道这一点。 - Ümañg ßürmån
1
@AnilThakur,你的问题不够完整,无法正确理解问题。请[编辑]并添加以下信息。1. 你正在使用哪个环境作为服务器,C#? 2. 是在局域网还是实时服务器上尝试? 3. 如果使用IIS服务器,在局域网中是否配置了访问权限? 4. 发送到服务器的(JSON?)正文示例和预期输出。 5. 最后[mcve](当前发布的代码不足以解决问题。不要发布完整的代码,只需发布最小的代码。如果有人需要澄清,他们会要求进一步的代码)。 - Shashanth
显示剩余4条评论
2个回答

2

您需要使用响应作为响应模型,因为您的API正在与代码为403的错误流一起输入。

 @POST("v4/MyStore/data")
 Observable<Response<Void>> requestStore(@Body MyStoreRequest request);

现在当你消费响应时
 requestService.requestStore(request)
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.computation())
            .map(response -> {
               Log.d("Response",""+response);
                return response.header();
            }).subscribe(headers -> {
                        Log.d("Response",""+headers);
                    },
                    error -> {
                       Log.d("ERRRROOOR","Error");
                    });

response.header()会在您的API失败时返回所需的标头。


我需要在Retrofit中调用响应头部,如何简单地获取响应头部。 - Anil Thakur
response.getHeaders(); 应该会给你响应头。 - Rajat Beck
Observable<Headers>。这里需要更改吗?Observable<Response>。 - Anil Thakur

0

可能你在 Android 客户端的 API 请求中缺少了头信息。根据你的 评论,你正在发送带有授权头的承载令牌。

因此,你需要像下面这样在请求体中发送承载令牌。

@Headers({
        "Authorization: Bearer <your_bearer_token_here>", /* change token here */
        "Content-Type: application/json"
})
@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);

举个例子,

@Headers({
        "Authorization: Bearer ca0df98d-978c-410b-96ec-4e592a788c18",
        "Content-Type: application/json"
})
@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);

不要在请求中添加它,我会在 Charles 中进行检查。 - Anil Thakur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接