当前位置: 首页 > 知识库问答 >
问题:

具有授权和获取请求的 JSON 帖子

冯星阑
2023-03-14

所以,大家好。我在连接到服务器时遇到了一些问题。我曾与Yandex API和VK.COM API合作过,我的方法还不错。但是现在我不能从服务器得到任何响应。我想,我做得不对。

所以网站是https://android-test.7g-demo.com我还有API规范文件。以下是我在其中关于POST请求的内容。

# POST /oauth/token

>

  • 请求(应用程序/json; charset=utf-8)

    >

  • Accept: application/json
    

    身体

    {
        "username": "test@7glyphs.com",
        "password": "Test123",
        "grant_type": "password",
        "client_id": "2",
        "client_secret": "M1m2QgSdbRKWstTaVXlhdPotJ6WCC33rLLq3N6fK",
        "scope": "*"
    }
    

    响应 200 (application/json; charset=UTF-8)

    > < li>

    车身

    {"token_type":"Bearer","expires_in":31536000,"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjkyYzAyYTE5ZGM2MjdmZDFhZTdkMzFiN2FkZTI1ODBlMWNmYTMxMjQxOWQzZmI3ZDNhYThmOGU0NmFjOWJlMGExOWI5YWI2NjI0ZmVjNmFmIn0.eyJhdWQiOiIyIiwianRpIjoiOTJjMDJhMTlkYzYyN2ZkMWFlN2QzMWI3YWRlMjU4MGUxY2ZhMzEyNDE5ZDNmYjdkM2FhOGY4ZTQ2YWM5YmUwYTE5YjlhYjY2MjRmZWM2YWYiLCJpYXQiOjE1MDk0ODgyODgsIm5iZiI6MTUwOTQ4ODI4OCwiZXhwIjoxNTQxMDI0Mjg4LCJzdWIiOiIxIiwic2NvcGVzIjpbIioiXX0.HrbgI2aYhqZCx_IwmvK7Y14HkOy2GzEL03o6Cwc7flqlb3Ijw2m-YFffEb5f9wX9Meo83iU3VSbdgx1oDpuJj5z3zOt0Q_QDJPn-seNG5Y0ob-BvAaMojUZFgbgLfL_xcatmW3TABKbC3NcUrgNym1Ru8qyBMvgT-ZY6iPlN13srWEH8qmMn0vYMB9-YJjfdz5mBHs-Y35APy4-6DdxiD_vKbppDBZCS1Nm_XULfoA-7MBVh9VOK2hngFxtERjiCZNol1FrljLO30gNwg2bD4WRZeFMH0o3ws3tkpDSwcbE2pQE8JokVXGZ46cJQConTmPhQ-yuPtCkggiwobs_QEMPLrTlkQSyIjLHm24xXlNQ3DLbw4AcDiOCDLYcrT8-Ef-9zYpDIxiYPnej4Fi4OHFanvxdwz-X8zqH8E8JKrdEPKPwMTE_Xx7xzazjyZKJY6y2GvVkU1BnvMa4VL5naRdYMp6TWnvo5hQiCBLpQXAbyH-U396aex2Nr5RctHdl2eM8KVhIHlofqMobUjeXwo-N4frpsAxjOj2uOco8zymFYmIirpjOCwyIkxiiF0lwzA6GOXzFlu2P6uzCpjvKTo2ID0pAT3wsA0Qf7lpDB0NjQlR3MAar6hHIncnDOYrndF8aX20i0fLDQvnpFZa43-z7GOXMO5f8ctTPO7q4Cuoc","refresh_token":"def50200d653d332230e5fbb8d094ba6fc99b6186739fdee26bd256171d07885ffe6afee1eb53247fe6a32c93dd31e53256d103b694007c5ec5ef8aadef0db64a7a4f46103182decb35bbfc2d39232b02649ebc1a32183a7cf1d498cf4aec14a4adde3ee8d708400811bdf4bf3ae4c067088ecd2ea1e8300e3c8a7a70e0900e62436a80c45069cb0552a067b230d74bce29e80233a71f47d0d9f670a26f7f660a1f81d52c2980a79b07e909df7871f1a9b39feb53a9f27e20599b5e66121c6866e91bf653fd78321ca6ad495e72ecb228386894375ec6ad5e200d8e9f1cc0df5d86b190214990ccbbe01bacc09114eebd70365f0d1f8a6932e2408deda013e160516d70b3aa209b7f5c9213ab58c3627dd700605a689ac8408d9e8f12bf3d21034441f22df1318d5a6cc011c776c92a41b6faec2497e3758f52c3bf288098db094a929ecfdf69a8dab6f693e97b7ba1afa1b5e25ab46e9b85314fc7ba78f6f5a60117d4e"}
    

    但我不知道该怎么做。我写了这段代码:

    @Override
        protected Void doInBackground(Void... params) {
            try {
                URL url = new URL("https://android-test.7g-demo.com/?api.php");
                HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestMethod("POST");
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);
                urlConnection.connect();
    
                JSONObject jo = new JSONObject();
    
                jo.put("username", "test@7glyphs.com");
                jo.put("client_id", 2);
                jo.put("password", "Test123");
    
               BufferedOutputStream bos = new BufferedOutputStream(urlConnection.getOutputStream());
                bos.write(jo.toString().getBytes());
    
                String result = urlConnection.getResponseMessage();
                Log.d("", "server response: " + result);
    
            } catch (JSONException | IOException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    

    但我并没有收到服务器的回复。也许我应该把令牌放在哪里?或者应该为oauth请求使用任何库?或者我的代码应该换一种方式?谢谢你的回答。

  • 共有1个答案

    钦海荣
    2023-03-14

    最好和最简单的方法是使用改造而不是简单的任务
    http://square.github.io/retrofit/

     类似资料:
    • 问题内容: 当我从HttpPost中使用setHeader设置“ Authorization”标头时,主机名将从请求中消失,并且始终返回错误400(错误请求)。相同的代码在纯Java(没有android)上可以正常工作,并且当我在android上删除设置“ Authorization”标头时也可以正常工作,但是我需要授权。这是一个代码(域已更改): 方法getB64Auth()返回使用“ Base

    • 客户端通过按附录B使用“application/x-www-form-urlencoded”格式向授权端点URI的查询部分添加下列参数构造请求URI: response_type 必需的。值必须设置为“token”。 client_id 必需的。如2.2节所述的客户端标识。 redirect_uri 可选的。如3.1.2节所述。 scope 可选的。如3.3节所述的访问请求的范围。 state 推

    • 客户端通过按附录B使用“application/x-www-form-urlencoded”格式向授权端点URI的查询部分添加下列参数构造请求URI: response_type 必需的。值必须被设置为“code”。 client_id 必需的。如2.2节所述的客户端标识。 redirect_uri 可选的。如3.1.2节所述。 scope 可选的。如3.3节所述的访问请求的范围。 state 推

    • 由于客户端身份验证被用作授权许可,所以不需要其他授权请求。

    • 客户端获得资源所有者凭据所通过的方式超出了本规范的范围。一旦获得访问令牌,客户端必须丢弃凭据。

    • 问题内容: 我想向需要身份验证的服务器生成POST请求。我尝试使用以下方法: 但服务器未收到授权数据。应该添加授权数据的行如下: 和线 还抛出IOException。 无论如何,如果有人可以建议对以上逻辑进行任何修复,以启用带有UrlConnection的POST授权,我将非常感激。 但是显然,它不能像预期的那样起作用,尽管如果将相同的逻辑用于GET请求,则一切正常。 问题答案: 这里有一个很好的