отправить запрос с несколькими данными заголовка с использованием топлива - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь отправить почтовый запрос, написанный на kotlin и b, используя топливную инфраструктуру (https://github.com/kittinunf/Fuel). Однако мне нужно отправить тело json с почтовым запросом, а также учетные данные базовой аутентификации.

Это моя текущая попытка, которая всегда приводит к HTTP-исключению 400. Поэтому я чувствую, что с отправкой тела что-то не так. Я просто не могу понять, что это такое:

val myJsonBody = " {\n" +
        "        \"jql\": \"component = LOLO AND fixVersion = '18/3 Patch-2'\",\n" +
        "        \"startAt\": 0,\n" +
        "        \"maxResults\": 300,\n" +
        "        \"fields\": [\n" +
        "        \"issuetype\",\n" +
        "        \"created\",\n" +
        "        \"status\",\n" +
        "        \"summary\",\n" +
        "        \"customfield_10002\",\n" +
        "        \"customfield_10003\",\n" +
        "        \"customfield_11201\",\n" +
        "        \"customfield_10006\"\n" +
        "        ]\n" +
        "    }"
val confluenceUrl = "https://atc.mywebpage.net/jira/rest/api/2/search"

val (ignoredRequest, ignoredResponse, result) =
Fuel.post(confluenceUrl)
        .header("Content-Type", "application/json")
        .header(user,password)
        .jsonBody(myJsonBody)
        .responseString ()

result.fold({ print("success: $result") }, { print("failure: $result") })

Работающий запрос cURL, сгенерированный почтальоном, выглядит следующим образом:

curl -X POST \
  https://atc.mywebpage.net/jira/rest/api/2/search \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: xxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'cache-control: no-cache' \
  -d '{
    "jql": "component = LOLO AND fixVersion = '\''18/3 Patch-2'\''",
    "startAt": 0,
    "maxResults": 300,
    "fields": [
        "issuetype",
        "created",
        "status",
        "summary",
        "customfield_10002",
        "customfield_10003",
        "customfield_11201",
        "customfield_10006"
    ]
}'

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я немного поигрался и обнаружил, что для правильного доступа мне нужно использовать authentication (). Basic (), а не header ().Это результат:

    val confluenceUrl = "https://atc.mywebpage.net/jira/rest/api/2/search"
    val user = "myUser"
    val password = "myPassword"
    val myJsonBody = """
{
    "jql": "component = LOLO AND fixVersion = '18/3 Patch-2'",
    "startAt": 0,
    "maxResults": 300,
    "fields": [
        "issuetype",
        "created",
        "status",
        "summary",
        "customfield_10002",
        "customfield_10003",
        "customfield_11201",
        "customfield_10006"
    ]
}
        """.trimIndent()

    val (ignoredRequest, ignoredResponse, result) =
    Fuel.post(confluenceUrl)
            .header("Content-Type", "application/json")
            .authentication().basic(user, password)
            .jsonBody(myJsonBody)
            .responseString ()

    result.fold({ print("success: $result") }, { print("failure: $result") })
}
0 голосов
/ 05 марта 2019

Попробуйте выполнить этот запрос вручную. Используйте fiddler / postman / ваш предпочтительный HTTP-клиент. Может быть, вы упускаете что-то в теле или заголовках?

Также я рекомендую необработанный строковый литерал. Это гораздо более читабельно.

val myJsonBody = """
{
    "jql": "component = LOLO AND fixVersion = '18/3 Patch-2'",
    "startAt": 0,
    "maxResults": 300,
    "fields": [
        "issuetype",
        "created",
        "status",
        "summary",
        "customfield_10002",
        "customfield_10003",
        "customfield_11201",
        "customfield_10006"
    ]
}
        """.trimIndent()

        val confluenceUrl = "https://atc.mywebpage.net/jira/rest/api/2/search"

        val (ignoredRequest, ignoredResponse, result) =
            Fuel.post(confluenceUrl)
                .header("Content-Type", "application/json")
                .header(user,password)
                .jsonBody(myJsonBody)
                .responseString ()

        result.fold({ print("success: $result") }, { print("failure: $result") })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...