从C#调用中获取404,而从邮递员中获取200

时间:2019-01-28 21:01:14

标签: c# webclient restsharp

我正在尝试从C#代码调用API,但是我一直都在获取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从邮递员那里。

有什么想法吗?

编辑: 我在寻找小提琴的标题,但它们是不同的: 邮差: 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 :(得分:2)

不起作用的原因可能是因为Wizzair拒绝了来自未知/列入黑名单的UserAgent的请求,以防止对其API的“未经授权”使用。从邮递员或浏览器尝试userAgent-使用

进行设置

client.UserAgent = @"PostmanRuntime/7.6.0";

,因为常规的User-Agent标头会被覆盖(我假设您使用的是RestSharp)。 出于好奇,我亲自检查了一下,因为您的示例应该可以工作-而且似乎可以与更改的User-Agent一起工作