Получение 404 от C #, но 200 от Почтальона - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь вызвать API из кода C #, но все время получаю 404.Я посылаю один и тот же запрос от Почтальона, и всегда результат 200.

Мои запросы: postman request

        var body = new RequestBody
        {
            AdultCount = 1,
            ChildCount = 0,
            FlightList = new List<RequestFlightBody>
            {
                new RequestFlightBody
                {
                    ArrivalStation = fromCode,
                    DepartureStation = toCode,
                    FromDateTime = tomorrow,
                    ToDateTime = lastDate
                },
                new RequestFlightBody
                {
                    ArrivalStation = toCode,
                    DepartureStation = fromCode,
                    FromDateTime = tomorrow,
                    ToDateTime = lastDate
                }
            },
            InfantCount = 0,
            PriceType = "regular"
        };

        var client = new RestClient("https://be.wizzair.com/9.4.3");
        var request = new RestRequest(Method.POST);
        request.Resource = "api/search/timetable";
        request.AddJsonBody(body);
        var result = await client.ExecuteTaskAsync(request);

        if (result.IsSuccessful)
        {
            var model = JsonConvert.DeserializeObject<FlightBody>(result.Content);
            await SaveResults(model);
        }

Из этого кода результатом всегда является NoContent.Я попытался использовать код, сгенерированный почтальоном, и результат тоже NoContent.Когда я копирую сериализованный объект в почтальон как тело - это 200 от почтальона.

Любые идеи, что не так ??

РЕДАКТИРОВАТЬ: Я искал заголовки od fiddler, и они разные: почтальон: postman request код: code request

для кода:

var client = new RestClient(@"https://be.wizzair.com");
        var request = new RestRequest(Method.POST);
        request.Resource = @"9.4.3/api/search/timetable";
        request.AddHeader("host", "be.wizzair.com:443");
        request.AddHeader("Content-Type", "application/json");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("Accept", @"*/*");
        request.AddHeader("User-Agent", @"PostmanRuntime/7.6.0");
        request.AddHeader("Connection", @"close");
        request.AddJsonBody(body);

Должен ли я смоделировать запрос с теми же заголовками?Я не знаю, почему пропущены добавленные заголовки.

1 Ответ

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

Причина, по которой это не работает, вероятно, заключается в том, что Wizzair отклоняет запросы от неизвестных / занесенных в черный список UserAgents, чтобы предотвратить «несанкционированное» использование их API.Попробуйте userAgent из почтальона или браузера - установите его с

client.UserAgent = @"PostmanRuntime/7.6.0";

, так как обычный заголовок User-Agent будет переопределен (я полагаю, вы используете RestSharp).Я проверил это сам - из любопытства, поскольку ваш пример должен работать - и, похоже, он работает с измененным User-Agent

...