如何使用带有 AsynceTask 的 Oauth 2.0 向自定义 api 发送 http 请求

Posted

技术标签:

【中文标题】如何使用带有 AsynceTask 的 Oauth 2.0 向自定义 api 发送 http 请求【英文标题】:How to send an http request to custom api using Oauth 2.0 with AsynceTask 【发布时间】:2019-06-02 17:48:05 【问题描述】:

我想向自定义 api 发送一个 http 请求。 我有请求详细信息,它正在使用邮递员(http 客户端)工作。 我正在尝试使用 AsyncTask 将该请求转换为 android

我无法理解一些事情: 首先,如何发送我拥有的 Bearer 令牌(oauth 2.0)。 第二,如何发送杰森尸体。 有关请求的所有详细信息都在以下链接中: https://web.postman.co/collections/7428863-ca5b907d-2752-4d4e-b8a8-29d5cd0dc098?version=latest&workspace=03f5fe5b-0ecd-43f8-8759-3aa868f4cb7f

我的“DoInBackground”:

protected Void doInBackground(Void... voids) 
        response = null;
        Log.v("DoInBackground","entered");
        //sending Data
        if (valid) 

            Log.v("ifvaild","entered");
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("https://dmyzcsu4e68qfgi56y7l2qu5ky40da2o.ui.nabu.casa/api/services/script/turn_on");
            //httpPost.addHeader("Accept-Language", "he");
            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();  
            nameValuePair.add(new BasicNameValuePair("Authorization", "Bearer My Bearer"));
            nameValuePair.add(new BasicNameValuePair("Content-Type", "application/json"));
            nameValuePair.add(new BasicNameValuePair("script.turn_on", "script.gt1"));

            Log.v("nameValue","entered");

            try 
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair, HTTP.UTF_8));

             catch (UnsupportedEncodingException e)

            
                e.printStackTrace();
            
            try 
                response = httpClient.execute(httpPost);
                Log.v("HttpClient","entered");
             catch (ClientProtocolException e) 
                e.printStackTrace();
             catch (IOException e) 
                e.printStackTrace();
            
        
        return null;
    

这不起作用,我从服务器收到身份验证失败 感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要在标题中添加这些对。并将 body 添加为实体。

// headers
httpPost.addHeader("Authorization", "Bearer My Bearer");
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("script.turn_on", "script.gt1");

// body
String bodyString = "\"data\":1"; // your json string
StringEntity bodyEntity = new StringEntity(bodyString);
httpPost.setEntity(bodyEntity);

只是一个提示。查看 Retrofit2 库来完成所有这些工作。

【讨论】:

我正在尝试使用 AsyncTask 来做到这一点。我可以使用你发送的内容在 AsyncTask 中做同样的事情吗?谢谢。 你是说Retrofit2? Retrofit2 可能需要时间来适应。如果你不着急,我建议你学习它。它可以进行异步或同步 api 调用,而无需编写所有这些。如果你的意思是我的回答,那么是的,你可以在 asynctask 中使用它。

以上是关于如何使用带有 AsynceTask 的 Oauth 2.0 向自定义 api 发送 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OAuth 存储和发送带有 API 请求的授权令牌?

在带有 PKCE 的 OAuth 授权流中使用时如何在 Azure 应用注册中启用 CORS?

如何使用带有 DB 的 spring oauth2 实现资源服务器和身份验证服务器?

我们如何使用带有 Spring 5.0 的最新 spring-security-oauth2 jar 来实现授权服务器?

如何使用带有 OAuth 令牌的 Asp.Net MVC 中的 gmail API 更快地获取日期明智的电子邮件

如何使用 OAuth 2.0 客户端凭据流和带有 .net 核心的 JWT 证书连接到 Oracle Netsuite