Получить данные из остальных API - PullRequest
0 голосов
/ 04 июля 2018

Я впервые пытаюсь получить данные из REST API с помощью GET. Я могу получать данные с помощью почтальона, где я просто передаю свой URL со свойством GET и передаю две пары значений ключа на вкладке «Заголовки», как показано ниже, и могу получать записи данных с данными в формате 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 Ответ

0 голосов
/ 04 июля 2018

Насколько я понимаю, на основе информации, которую вы предоставили, API, который вы пытаетесь использовать, использует механизм аутентификации, основанный на существовании двух упомянутых заголовков (вместе с их значениями).

Когда вы выполняете вызов через Почтальон, вы устанавливаете эти заголовки на вкладке заголовка инструмента. Проблема в том, что в вашем коде вы этого никогда не сделаете. Вместо этого вы пытаетесь создать строку, содержащую закодированное в base64 значение учетных данных.

Предполагая еще раз, что API требует наличия заголовков, я бы посоветовал попытаться установить те, которые вам требуются, и попытаться выполнить вызов. В этом смысле ваш код должен выглядеть примерно так:

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

Это должно работать для вас нормально - опять же, учитывая, что механизм аутентификации API основан на заголовках, которые вы упоминаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...