使用基本身份验证在 Java 中获取和发布 API 调用

Posted

技术标签:

【中文标题】使用基本身份验证在 Java 中获取和发布 API 调用【英文标题】:Get and Post API call in java with basic authentication 【发布时间】:2020-10-15 06:29:28 【问题描述】:

我想在java 中调用GETPOST API,而不使用任何framework。我需要使用基本身份验证。任何人都可以帮我提供一些教程链接。在谷歌中,我只在spring 框架中找到了代码,但我没有使用Spring。我正在寻找使用basic authentication.调用API 的代码

我必须在下面的code 中添加新的urlauthentication。如果APIbasic auth 保护并且它是POST 方法,需要进行什么修改。我是java 的新手,所以不太了解。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;

public class NetClientGet 

    public static void main(String[] args)  
        
        try
        
            System.out.println("Inside the main function");
             URL weburl=new URL("http://dummy.restapiexample.com/api/v1/employees");
             HttpURLConnection conn = (HttpURLConnection) weburl.openConnection();
             conn.setRequestMethod("GET");
             conn.setRequestProperty("Accept", "application/json");
             System.out.println("Output is: "+conn.getResponseCode());
             System.out.println("Output is: ");
             System.setProperty("http.proxyHost", null);
             //conn.setConnectTimeout(60000);
             if(conn.getResponseCode()!=200)
             
                 System.out.println(conn.getResponseCode());
                 throw new RuntimeException("Failed : HTTP Error Code: "+conn.getResponseCode());
             
             System.out.println("After the 2 call ");
             InputStreamReader in=new InputStreamReader(conn.getInputStream());
             BufferedReader br =new BufferedReader(in);
             String output;
             while((output=br.readLine())!=null)
             
                 System.out.println(output);
             
             conn.disconnect();
             
        
        catch(Exception e)
        
            System.out.println(e.getMessage());
        
        
    

【问题讨论】:

你有没有尝试过?该身份验证只是 HTTP 请求中的标头字段。 我已经添加了有问题的代码。我可以在没有身份验证的情况下使用 API。但我不知道如何使用接受基本身份验证的 POST API。我没有使用弹簧。 您已经设置了一个名为 Accept 的标头。以相同的方式添加 Authentication 标头。看这里:***.com/questions/12732422/… 谢谢@f1sh 我也会经历同样的事情。 【参考方案1】:

基本认证

请参阅 RFC #2617 第 2 节:Basic Authentication Scheme

Authentication 标头添加到请求中。这是一个例子:

String username = "john";
String password = "pass";
// ...
URL weburl=new URL("http://dummy.restapiexample.com/api/v1/employees");
HttpURLConnection conn = (HttpURLConnection) weburl.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
// snippet begins
conn.setRequestProperty("Authorization",
  "Basic " + Base64.getEncoder().encodeToString(
    (username + ":" + password).getBytes()
  )
);
// snippet ends
System.out.println("Output is: "+conn.getResponseCode());

POST 方法

有关在 HttpURLConnection 中使用 POST 方法的更多信息,请参阅 this answer。

【讨论】:

以上是关于使用基本身份验证在 Java 中获取和发布 API 调用的主要内容,如果未能解决你的问题,请参考以下文章

无法将令牌附加到 API 调用(基本身份验证、AFNetworking)

Firebase 云功能,具有对外部 api 的基本身份验证的获取请求

如何从具有基本身份验证的 rest api 获取数据?

如何从 HTTP 基本身份验证中获取密码

java Rest API中的登录身份验证获取不支持的媒体类型

通过 JSON 在 Google latitude API 中获取经过身份验证的用户的过去签到