为了账号安全,请及时绑定邮箱和手机立即绑定

从Rest API获取数据

从Rest API获取数据

Helenr 2021-05-04 17:15:43
我第一次尝试使用GET从REST API获取数据。我可以使用邮递员获取数据,我只需通过GET属性传递我的url,然后在Headers选项卡中传递两个键值对,如下所示,并能够以csv格式获取数据记录明智的数据(常规csv类型的输出,列名有记录)Headers tab in Postman    autd_id:ddhd45t-78d0-54ad-8320-94aejit526    aith:token:hf2h1-d1a1-6589-c55d-94aejit526现在,我尝试使用Java自己执行此操作,但收到错误代码401。这意味着我猜错了凭据,但这是正确的。这是我的代码。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;public class Brigade {    public static void Getbrigadedata() {        try {            URL url = new URL(                    "https://Brigade.co-buying.com/api/reports/referred/brigade_raf1");            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setRequestMethod("GET");            String userCredentials = "ddhd45t-78d0-54ad-8320-94aejit526:9658hf2h1-d1a1-6589-c55d-94aejit526";            new Base64();            String basicAuth = "Basic " + new String(Base64.encode(userCredentials.getBytes()));            conn.setRequestProperty("Authorization", basicAuth);            if (conn.getResponseCode() != 200) {                throw new RuntimeException("Failed : HTTP error code : "                        + conn.getResponseCode());            }            BufferedReader br = new BufferedReader(new InputStreamReader(                    (conn.getInputStream())));            String output;            System.out.println("Output from Server .... \n");            while ((output = br.readLine()) != null) {                System.out.println(output);            }            conn.disconnect();        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}谁能告诉我做错了什么?
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

据我了解,基于您要使用的API所提供的信息,您将基于上述两个标头(及其值)的存在使用一种身份验证机制。

通过邮递员执行呼叫时,可以在工具的标题选项卡中设置这些标题。问题是尽管在您的代码中,您从未这样做。相反,您尝试创建一个包含凭据的base64编码值的字符串。

再次假设该API需要将标头放置在适当的位置,我建议您尝试将其设置为您所请求的标头,然后尝试执行该调用。从这种意义上讲,您的代码应类似于:

conn.setRequestProperty("<header_1>", "<header_value1>");
conn.setRequestProperty("<header_2>", "<header_value2>");

这样做对您来说还不错-再次考虑到API的身份验证机制是基于您提到的标头。


查看完整回答
反对 回复 2021-05-12
  • 1 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信