Как включить куки при отправке запроса с клиентом Java Jersey? - PullRequest
1 голос
/ 01 июня 2019

Мне нужно отправить запрос на получение API и получить результаты. Я использую Java, библиотеку Джерси в своем проекте, и я решил использовать клиент Джерси для получения данных. Однако API возвращает сообщение об ошибке, которое указывает, что я должен разрешить куки для доступа к этому API. Я могу получить правильный ответ, когда попробую с такими приложениями, как почтальон, или просто с помощью обычного браузера, такого как Chrome. Но я не смог выяснить, как я могу включить куки в клиентском объекте Java Jersey.

Я искал, чтобы узнать, как включить куки в клиенте Java-Джерси, но не смог найти какой-либо ресурс об этом. Поэтому я не мог попробовать какое-либо решение.

Мой код очень прост:

    Client client = Client.create(); // Create jerseu client
    WebResource webResource = client.resource(BASEURI +  EXCHANGEINFO); // create web resource with a specific URI

    System.out.println(webResource 
            .accept("application/json")
            .get(ClientResponse.class)
            .getEntity(String.class)); // Write results to console

В результате этого запроса я получил ошибку, о которой упоминал выше. Как включить куки при отправке запроса с клиентом Java Jersey?

1 Ответ

1 голос
/ 01 июня 2019

В соответствии с обсуждением, я прошел API, который вы предоставили. На самом деле, API обеспечивает вводящее в заблуждение сообщение при совершении вызова покоя. Если вы посмотрите подробности сообщения об ошибке, полученного от вызова API, он говорит.

Владелец этого сайта (api.pro.coinbase.com) заблокировал вашу доступ на основе подписи вашего браузера (4e0a3c06895d89af-ua21).

Так, каков ответ? API на самом деле хочет, чтобы вызов был сделан из браузера, и каждый браузер отправляет заголовок под названием «Пользователь-агент». Посмотрите, что такое пользовательский агент . Тем не менее, я решил вашу проблему, вы можете проверить полный код ниже.

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class TestGetCallByJersey {
  public static void main(String[] args) {
    String resourceUri = "https://api.pro.coinbase.com/products";
    try {
      Client client = Client.create();
      WebResource webResource = client.resource(resourceUri);
      ClientResponse response =
          webResource
              .accept("application/json")
              .header("User-Agent", "Mozilla/5.0")
              .get(ClientResponse.class);

      System.out.println("response status = " + response.getStatus());
      String result = response.getEntity(String.class);
      System.out.println("Output from api call .... \n" + result);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

В настоящее время я тестировал Java 8 и использовал следующий файл jar.

Джерси-клиент версия 1.8 Если вы используете Maven, вы можете включить следующую зависимость в pom.xml.

<dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.8</version>
        </dependency>
...