0

我在 Redcap 控制台上有一个 REDCap 项目完整设置。

生成的 API 令牌。

从 REDCap 记录保存工作。

也来自浏览器工具。

但是当我从 Android App 调用它时,它会返回 403 禁止。

有没有像为用户设置权限的东西。

同样在 ios app 上也能完美运行。

 HashMap<String, String> params = new HashMap<String, String>();
       
        params.put("token","MY TOKEN");
        params.put("content","record");

OkHttpClient client = new OkHttpClient();

        RequestBody body = RequestBody.create(JSON, String.valueOf(params));
        Request request = new Request.Builder()
                .url("MY_URL")
                .post(body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .build();

        client.newCall(request).enqueue(new Callback() {


            @Override
            public void onFailure(com.squareup.okhttp.Request request, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(com.squareup.okhttp.Response response) throws IOException {
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                } else {
                    // do something wih the result
                    Log.d("check ok http response ", response.toString());
                }
            }

    });

从浏览器工具中,如果我在选择 POST 时放置相同的 URL 并仅设置两个参数 token 和 content ,它会返回 200 OK 。

但是从Android它返回 403 。请帮忙,我在android代码中尝试了几种方法。

4

1 回答 1

0

你这样做:

RequestBody body = RequestBody.create(JSON, String.valueOf(params));

这不是一个有效的表单主体。做这个:

FormBody.Builder formBuilder = new FormBody.Builder()
    .add("token","MY TOKEN").add("content","record");

进而

Request request = new Request.Builder()
            .url("MY_URL")
            .post(formBuilder.build())
            .addHeader("Content-Type", "application/x-www-form-urlencoded")
            .build();
于 2017-04-01T19:56:58.823 回答