Почтальон дает правильный ответ, но успокоенный возвращает неправильный ответ - PullRequest
0 голосов
/ 23 января 2019

Я работаю с уверенностью в течение нескольких месяцев.

При получении данных из API с открытым исходным кодом заметил, что при выполнении вызова GET через Postman API возвращается 200 и получены действительные / ожидаемые данные.enter image description here

Написал код ниже (Java использует Rest-Assured), чтобы получить те же данные из API:

package com.type.GetFuelTypeFromAPI;

import static io.restassured.RestAssured.given;

import java.net.MalformedURLException;
import java.net.URL;
import org.testng.annotations.Test;

import io.restassured.response.Response;

public class SampleGetAPI {

@Test
public void getDetails() throws MalformedURLException {

    Response response=
    given()
        .queryParam("cmd", "getTrims")
        .queryParam("make", "Abarth")
        .queryParam("year", "1955")
        .queryParam("model", "207")
    .when()
        .get(new URL("https://carqueryapi.com/api/0.3/"));

    String responseBody = response.body().asString();
    System.out.println(responseBody);
}
}

Вывод кода:

[TestNG] Running:
C:\Users\AaSomvanshi\AppData\Local\Temp\testng-eclipse-1657322415\testng-customsuite.xml

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /api/0.3/
on this server.<br />
</p>
<p>Additionally, a 403 Forbidden
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

PASSED: getDetails

===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

Может кто-нибудь подсказать мне, как преодолеть эту проблему?

1 Ответ

0 голосов
/ 23 января 2019

После лота поиска следуют следующие шаги:

Использовал Wireshark для перехвата вызовов почтальона и API с гарантией отдыха.

Вызов API Почтальона содержит следующие значения:


GET /api/0.3/?cmd=getTrims&make=Abarth&year=1955&model=207 HTTP / 1.1 \ r \ n

контроль кэша: без кэширования \ r \ n

Почтальон-токен: c70faee6-f00c-47b6-9c6a-bb1c4ffe5cf4 \ r \ n

Пользователь-агент: PostmanRuntime / 7.6.0 \ r \ n

Примите: / \ r \ n

cookie: __cfduid = dcce85c35c3e5eb33524b0a1a79b6bf2b1548159374 \ r \ n

принять кодировку: gzip, deflate \ r \ n

реферер: https://carqueryapi.com/api/0.3/?cmd=getTrims&make=Abarth&year=1955&model=207\r\n

Хост: www.carqueryapi.com \ r \ n

Соединение: keep-alive \ r \ n

\ г \ п

[URI полного запроса: http://www.carqueryapi.com/api/0.3/?cmd=getTrims&make=Abarth&year=1955&model=207]

[HTTP-запрос 1/1] [Ответ в рамке: 350]


Вызов API Rest-Assured содержит следующие значения:


GET /api/0.3/?cmd=getTrims&make=Abarth&year=1955&model=207 HTTP / 1.1 \ r \ n

Примите: / \ r \ n

Хост: www.carqueryapi.com \ r \ n

Подключение: Keep-Alive \ r \ n

Пользователь-агент: Apache-HttpClient / 4.5.3 (Java / 1.8.0_171) \ r \ n

Accept-Encoding: gzip, deflate \ r \ n

\ г \ п

[URI полного запроса: http://www.carqueryapi.com/api/0.3/?cmd=getTrims&make=Abarth&year=1955&model=207]

[HTTP-запрос 1/1]

[Ответ в рамке: 769]


Замечание:

Значение заголовка User-Agent было другим. И API блокировал запросы для Apache-HttpClient , но с учетом PostmanRuntime / 7.6.0 .

Обновлен код для заголовка User-Agent со значением PostmanRuntime / 7.6.0 , и все заработало.

Ниже работает код:

package com.type.GetFuelTypeFromAPI;

import static io.restassured.RestAssured.given;

import java.net.MalformedURLException;
import java.net.URL;
import org.testng.annotations.Test;

import io.restassured.response.Response;

public class SampleGetAPI {

@Test
public void getDetails() throws MalformedURLException {

    Response response=
    given()
        .header("User-Agent", "PostmanRuntime/7.6.0")
        .queryParam("cmd", "getTrims")
        .queryParam("make", "Abarth")
        .queryParam("year", "1955")
        .queryParam("model", "207")
    .when()
        .get(new URL("https://carqueryapi.com/api/0.3/"));

    String responseBody = response.body().asString();
    System.out.println(responseBody);
}
}
...