在 android 中使用 REDCap API 不断得到 403

Using REDCap API in android keeps getting 403

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

API 令牌已生成。

记录从 REDCap 保存的工作。

同样来自浏览器工具。

但是当我从 Android App 调用它时 returns 403 forbidden .

是否有为用户设置权限之类的东西。

同样在 ios 应用程序中也能完美运行。

 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());
                }
            }

    });

从浏览器工具中,如果我将相同的 URL 与选择 POST 并仅设置两个参数令牌和内容,它 return 200 OK。

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

您正在这样做:

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();