我正在尝试从C#代码调用API,但是我一直都在获取404。我从邮递员发送了相同的请求,结果总是200。
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从邮递员那里。
有什么想法吗?
编辑: 我在寻找小提琴的标题,但它们是不同的: 邮差: 码:
获取代码:
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);
应该/可以模拟具有相同标题的请求吗?我不知道为什么会错过添加的标题。
答案 0 :(得分:2)
不起作用的原因可能是因为Wizzair拒绝了来自未知/列入黑名单的UserAgent的请求,以防止对其API的“未经授权”使用。从邮递员或浏览器尝试userAgent-使用
进行设置 client.UserAgent = @"PostmanRuntime/7.6.0";
,因为常规的User-Agent标头会被覆盖(我假设您使用的是RestSharp)。 出于好奇,我亲自检查了一下,因为您的示例应该可以工作-而且似乎可以与更改的User-Agent一起工作