Получить данные cookie из ответа в Logic App

В почтальоне я вижу свои файлы cookie и прикрепленные к ним значения: Получить данные cookie из ответа в Logic App

Когда я запускаю сообщение в приложении логики, я получаю ответ, и он работает. Проблема в том, что я понятия не имею, как получить значения cookie из ответа, поскольку я не вижу его в ответе. Я хочу знать, как мне получить значения файлов cookie из моего HTTP-ответа. Получить данные cookie из ответа в Logic App

Вам нужно будет использовать функцию Azure для того, что вы хотите.

Skin 23.03.2022 01:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как было предложено Кожа, вам необходимо использовать функцию Azure из-за некоторых ограничений Logic Apps.

Согласно Документ Майкрософт:

If a Response action includes Cookie and Set-Cookie headers, Logic Apps removes these headers from the generated response message without showing any warning or error

Вы можете использовать функцию Azure, чтобы получить ответ с данными cookie, см. Как читать файлы cookie из запроса в приложении функции Azure с помощью python и Лучший способ установить файлы cookie и другие повторяющиеся заголовки в функциях Javascript Http..

Ответ принят как подходящий

Примерьте это на размер.

На портале Azure создайте новую функцию Azure HttpTrigger, используя стек .NET, и назовите ее HttpProxy, используя этот код, отметив, что этот код должен работать для вас, но может потребоваться настройка, если вы хотите выйти за рамки того, что он делает. .

https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-app-portal

#r "Newtonsoft.Json"

using System.Net;
using System.Net.Http.Headers;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class MyKeyValuePairs
{
    [JsonProperty("key")]
    public string Key { get; set; }

    [JsonProperty("value")]
    public string Value { get; set; }

    public MyKeyValuePairs()
    {
        Key = String.Empty;
        Value = String.Empty;
    }
}

public class HttpProxySettings
{
    [JsonProperty("url")]
    public string Url { get; set; }

    [JsonProperty("method")]
    public string Method { get; set; }

    [JsonProperty("headers")]
    public List<MyKeyValuePairs> Headers { get; set; }

    public HttpProxySettings()
    {
        Headers = new List<MyKeyValuePairs>();
        Method = "POST";
    }
}
public class HttpProxyResponse
{
    [JsonProperty("statusCode")]
    public int StatusCode { get; set; }

    [JsonProperty("body")]
    public string Body { get; set; }

    [JsonProperty("headers")]
    public List<MyKeyValuePairs> Headers { get; set; }

    [JsonProperty("cookies")]
    public List<MyKeyValuePairs> Cookies { get; set; }

    public HttpProxyResponse()
    {
        Headers = new List<MyKeyValuePairs>();
        Cookies = new List<MyKeyValuePairs>();
        Body = String.Empty;
    }
}

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    var httpProxySettings = JsonConvert.DeserializeObject<HttpProxySettings>(requestBody);

    var result = new HttpProxyResponse();

    var cookiesContainer = new CookieContainer();
    var httpClientHandler = new HttpClientHandler();
    httpClientHandler.CookieContainer = cookiesContainer;

    var httpClient = new HttpClient(httpClientHandler);

    foreach (var header in httpProxySettings.Headers)
    {
        switch (header.Key.Trim().ToUpper())
        {
            case "AUTHORIZATION":
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(header.Value.Split(" ")[0], header.Value.Split(" ")[1]);
                break;

            case "ACCEPT":
                httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(header.Value));
                break;

            default:
                httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
                break;
        }
    }

    var uri = new Uri(httpProxySettings.Url);
    var httpMethod = HttpMethod.Get;

    switch (httpProxySettings.Method.Trim().ToUpper())
    {
        case "POST":
            httpMethod = HttpMethod.Post;
            break;

        default:
            break;
    }

    var httpRequestMessage = new HttpRequestMessage(httpMethod, uri);

    // Make the call and get the response.
    var response = await httpClient.SendAsync(httpRequestMessage);

    result.StatusCode = ((int)response.StatusCode);

    foreach (var header in response.Headers)
        foreach (var value in header.Value)
            result.Headers.Add(new MyKeyValuePairs() { Key = header.Key, Value = value });

    result.Body = await response.Content.ReadAsStringAsync();
    result.Cookies = cookiesContainer.GetCookies(uri).Select(x => new MyKeyValuePairs() { Key = x.Name, Value = x.Value }).ToList();

    return new OkObjectResult(result);
}

Теперь в LogicApps добавьте действие Azure Functions и выберите функцию HttpProxy, которую вы создали на последнем шаге.

Теперь с телом вам нужно (сначала настроить) передать это как тело и выбрать СООБЩЕНИЕ в качестве метода...

{
  "url": "https://yoururl.com",
  "method": "POST",
  "headers": [
    {
      "key": "Username",
      "value": "YourUsername"
    },
    {
      "key": "Password",
      "value": "YourPassword"
    }
  ]
}

При выполнении это даст результат, который также содержит файлы cookie в ответе. Вы обнаружите, что тело ответа содержится в параметре Тело, который вы можете извлечь и проанализировать.

Это пример того, как я вызываю URL-адрес, предоставленный моей компанией...

Payload

... и да, их там много, но это результат, и, как вы можете видеть, внизу ответа есть массив файлов cookie, все заголовки и тело ответа...

{
    "statusCode": 200,
    "headers": {
        "Transfer-Encoding": "chunked",
        "Vary": "Accept-Encoding",
        "Request-Context": "appId=cid-v1:ffaa216d-669a-4113-a9a3-a410e3ea837e",
        "Date": "Wed, 23 Mar 2022 05:08:35 GMT",
        "Content-Type": "application/json; charset=utf-8",
        "Content-Length": "2439"
    },
    "body": {
        "statusCode": 200,
        "body": "{\"d\":{\"__metadata\":{\"id\":\"https://myurl.com/DetailsSet('0')\",\"uri\":\"https://myurl.com/DetailsSet('0')\",\"type\":\"ZSERVICE_SRV.Details\"},\"ServiceId\":\"0\",\"Username\":\"S_USERNAME\",\"Parameters\":{\"__deferred\":{\"uri\":\"https://myurl.com/DetailsSet('0')/Parameters\"}},\"Result\":{\"__deferred\":{\"uri\":\"https://myurl.com/DetailsSet('0')/Result\"}}}}",
        "headers": [
            {
                "key": "Set-Cookie",
                "value": "sap-usercontext=sap-client=010; path=/"
            },
            {
                "key": "Set-Cookie",
                "value": "SAP_SESSIONID_ECX_010=fDYXEyhV_XMmF8D0F1mBCkUwMC2qZxHsqXIADTrRZY0%3d; path=/"
            },
            {
                "key": "Set-Cookie",
                "value": "TS0185a829=01b4b1e234597142bcf7f59feffcee3fd29bd758182de666f47ecf3d1d7283cc3adf0dd443e22722dd59dd653c37195ae58e78e338; Path=/; Domain=.myurl.com"
            },
            {
                "key": "Set-Cookie",
                "value": "TS01196ab8=0105b6b7b6f79ac0e8e202d4dc042de140020b1fe2cd0e455a269a3b755938e2d4e01e888775c0e8e63f82ce5abad536ce413b412e; Path=/; Secure; HTTPOnly"
            },
            {
                "key": "Set-Cookie",
                "value": "TS01c6a478=0105b6b7b6f79ac0e8e202d4dc042de140020b1fe2cd0e455a269a3b755938e2d4e01e888775c0e8e63f82ce5abad536ce413b412e; path=/; domain=.myurl.com; HTTPonly; Secure"
            },
            {
                "key": "x-csrf-token",
                "value": "E8Kc5dp0qJYbC5eardfBXA= = "
            },
            {
                "key": "dataserviceversion",
                "value": "2.0"
            },
            {
                "key": "sap-metadata-last-modified",
                "value": "Wed, 30 Sep 2020 22:05:32 GMT"
            },
            {
                "key": "Cache-Control",
                "value": "no-store, no-cache"
            },
            {
                "key": "sap-processing-info",
                "value": "ODataBEP=,crp=,st=,MedCacheHub=SHM,codeployed=,softstate = "
            },
            {
                "key": "sap-server",
                "value": "true"
            },
            {
                "key": "sap-perf-fesrec",
                "value": "73461.000000"
            },
            {
                "key": "Strict-Transport-Security",
                "value": "max-age=16070400; includeSubDomains"
            },
            {
                "key": "Vary",
                "value": "Accept-Encoding"
            }
        ],
        "cookies": [
            {
                "key": "sap-usercontext",
                "value": "sap-client=010"
            },
            {
                "key": "SAP_SESSIONID_ECX_010",
                "value": "fDYXEyhV_XMmF8D0F1mBCkUwMC2qZxHsqXIADTrRZY0%3d"
            },
            {
                "key": "TS01196ab8",
                "value": "0105b6b7b6f79ac0e8e202d4dc042de140020b1fe2cd0e455a269a3b755938e2d4e01e888775c0e8e63f82ce5abad536ce413b412e"
            },
            {
                "key": "TS0185a829",
                "value": "01b4b1e234597142bcf7f59feffcee3fd29bd758182de666f47ecf3d1d7283cc3adf0dd443e22722dd59dd653c37195ae58e78e338"
            },
            {
                "key": "TS01c6a478",
                "value": "0105b6b7b6f79ac0e8e202d4dc042de140020b1fe2cd0e455a269a3b755938e2d4e01e888775c0e8e63f82ce5abad536ce413b412e"
            }
        ]
    }
}

Output

Теперь в LogicApps вы можете анализировать этот вывод и получать файлы cookie по мере необходимости.

Другие вопросы по теме