【问题标题】:Retrofit POST Request authentication token not accepting改造 POST 请求身份验证令牌不接受
【发布时间】:2015-08-31 22:17:22
【问题描述】:

我正在尝试向我创建的 REST API 发送 POST 请求。为此,我正在使用改造。

现在,当我在终端中使用 CURL 命令发送请求时,请求被接受并存储了值。下面是代码:

curl -i -H "Accept: application/json" -H "Content-type: application/json" -H "X-User-Email: abcd@gmail.com" -H "X-User-Token: qQsQobQv-Wmum7bUs4b_"  -X POST -d '{"store": {"code":"0010" } }' http://localhost:3000/api/store.json

以上工作完全正常。

现在,当我尝试在我的 Android 应用程序中使用 Retrofit 发送请求时,它在我的 API 中显示未授权错误。并且没有任何内容被存储。

final String endpoint = "http://localhost:3000/api/store.json"
RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {
                request.addHeader("Content-Type", "application/json");
                request.addHeader("Accept", "application/json");
                request.addHeader("X-User-Email", email);
                request.addHeader("X-User-Token", auth_token);
            }
        };

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(endpoint)
                .setRequestInterceptor(requestInterceptor)
                .build();

        Service service = restAdapter.create(Service.class);
        service.store(fault, new Callback<StoreResponse>() {
            @Override
            public void success(StoreResponse storeResponse, Response response) {
                Log.d(LOG_TAG, "Success");
            }

            @Override
            public void failure(RetrofitError error) {
                Log.d(LOG_TAG, "Failure" + error.getMessage());
            }
        });

这不起作用。我不知道该怎么办。卡在这里一段时间了。 请帮忙!!!

这是服务类:

public interface Service {
    @POST("/")
    public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}

编辑

现在工作正常。实际上我的电子邮件没有被存储,所以变量为空。修复了这个问题,现在一切正常。

【问题讨论】:

  • 请发布您的服务课程
  • 我已经编辑了我的问题。请看一下

标签: android curl http-post retrofit


【解决方案1】:

如下改变你的“测试”类:

final String endpoint = "http://localhost:3000/api"

RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(endpoint)
                .build();

Service service = restAdapter.create(Service.class);
service.store(fault, new Callback<StoreResponse>() {
    @Override
    public void success(StoreResponse storeResponse, Response response) {
        Log.d(LOG_TAG, "Success");
    }

    @Override
    public void failure(RetrofitError error) {
        Log.d(LOG_TAG, "Failure" + error.getMessage());
    }
});

还有你的服务接口:

public interface Service {
   @Headers({"X-User-Email: abcd@gmail.com", "X-User-Token: qQsQobQv-Wmum7bUs4b_"})
   @POST("/store.json")
   public void store(@Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}

或者如果您需要具有动态值的标题:

public interface Service {
   @POST("/store.json")
   public void store(@Header("X-User-Email") String email, @Header("X-User-Token") String token, @Body StoreResponse fault, Callback<StoreResponse> responseCallback);
}

【讨论】:

  • 但是如何在这个解决方案的Header中实现动态参数呢? X-User-Token 可以更改次数,这就是我使用 RequestInterceptor 的原因。而且电子邮件 ID 也会因用户而异,它不能保持不变。
  • 我已经编辑了我的问题。请看一看。无论如何,您确定您的凭据的值是合适的吗??
  • 我已经尝试了最后一部分。仍然显示未经授权的用户。不使用身份验证令牌或类似的东西。或者post请求不达标。
  • 显示 401 Unauthorized 错误。为什么会出现这种情况??改造类有什么问题吗?
  • 哦,它工作正常。并使用所有技术。问题是我的电子邮件没有被存储,所以它是空的。这就是它显示未经授权的错误的原因。感谢您的帮助维克多!
猜你喜欢
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多