В Postman я пытаюсь получить значение сеанса, возвращенное из почтового вызова, и использовать его в другом вызове get.
Я имею в виду, я звонил через Postman:
curl -X POST \
https://skyscanner-skyscanner-flight-search-v1.p.rapidapi.com/apiservices/pricing/v1.0 \
-H 'Accept: */*' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Host: skyscanner-skyscanner-flight-search-v1.p.rapidapi.com' \
-H 'Postman-Token: xxxx' \
-H 'User-Agent: PostmanRuntime/7.15.0' \
-H 'accept-encoding: gzip, deflate' \
-H 'cache-control: no-cache' \
-H 'content-length: 177' \
-d 'inboundDate=2019-11-25&cabinClass=economy&children=0&infants=0&Country=BR&Currency=BRL&locale=pt-BR&originPlace=GRU-sky&destinationPlace=MCZ-sky&outboundDate=2019-11-19&adults=2'
Он вернулся в заголовке среди других ключей:
Location →http://partners.api.skyscanner.net/apiservices/pricing/uk2/v1.0/b5b906e9-164e-4f1d-b5ce-9085b8a3506d
Теперь я хочу вызвать другой API и должен использовать идентификатор сеанса, возвращенный в предыдущем вызове. Это после /v1.0/. В данном случае это b5b906e9-164e-4f1d-b5ce-9085b8a3506d.
Первые шаги - это получение значения ключа местоположения, но я получаю сообщение об ошибке, упомянутое в заголовке этого вопроса (для получения более подробной информации см. прилагаемое изображение).
Итак, мой прямой вопрос: как я могу получить значение местоположения из другого почтового запроса? Что ж, дополнительный и полезный комментарий будет о том, как проанализировать и получить только идентификатор сеанса, но, естественно, сначала я должен исправить, как получить все значение местоположения.
Это более или менее то, что я пытаюсь:
var sessionKey = JSON.parse(postman.getResponseHeader('Location') );//maybe here applying some regular expression to get only the value after the last "/"
pm.environment.set("sessionkey", postman.getResponseHeader("sessionkey"));
Мой вопрос чем-то близок к В POSTMAN, как мне получить подстроку элемента заголовка ответа?, но здесь автор вопроса может использовать postman.getResponser и, кажется, он не получил окончательного ответа в конце.
Моя версия Postman 7.3.4 (последняя) (я только что обновил ее).
*** отредактировано после первого предложения
*** еще один предварительный провал
var locationHeader = pm.response;
console.info(pm.response); //Print successfully all response including body and header
var jsonData = JSON.parse(pm.response); //exception: There was an error in evaluating the Pre-request Script: JSONError: Unexpected token u in JSON at position 0
console.info("Location = " + jsonData.Location);
PS. интересно что
pm.request.headers.add({key: 'X-RapidAPI-Host', value: 'skyscanner-skyscanner-flight-search-v1.p.rapida.com'})
корректно работает в моей коллекции Pre-request scripts. Очевидно, что есть pm.request.headers.get, не так ли? Но это не так.
*** отредактировано
Я также добавил этот вопрос в https://community.getpostman.com/t/trying-to-get-a-session-value-from-a-post-call-in-postman-typeerror-postman-getresponseheader-is-not-a-function/ 6804
*** отредактировано
На всякий случай, если кто-то заинтересуется, моя окончательная реализация
var locationHeader = pm.response.headers.get("Location").split('/');
var locationPosition = locationHeader.length-1;
var sessionKey = locationHeader[locationPosition];
pm.environment.set("sessionkey", sessionKey);
на вкладке «Тест» при вызове POST Create Session
Добавьте следующий скрипт в тест первого запроса, он установит значение sessionkey
, которое вы сможете использовать для последующих вызовов.
var locationHeader = postman.getResponseHeader("Location").split('/');
var sessionKey = locationHeader[locationHeader.length-1];
pm.environment.set("sessionkey", sessionKey);
Извините, та же ошибка: «Произошла ошибка при оценке сценария предварительного запроса: TypeError: postman.getResponseHeader не является функцией». Я добавлю снимок экрана, но кажется, что версия почтальона, которую я использую, не имеет ни «postman.getResponseHeader», ни «pm.getResponseHeader». Нужно ли мне устанавливать какой-то плагин в Postman, чтобы иметь такую функцию? Думаю, нет.
На самом деле ваш ответ верен на 100%. Я не понял, что вы указываете на вкладку «Тест» вместо вкладки «Сценарий предварительного запроса».
Отвечает ли это на ваш вопрос? Как я могу получить последние символы строки