我之前没有使用过 HttpClient,如果它很明显,我深表歉意。
我正在研究 airbnb api http://airbnbapi.org/#view-listing-info
我对端点的理解是我不需要身份验证 token ,因为这是我尝试使用的公共(public)端点。不幸的是,无论我尝试做什么,我都会收到 403,我不完全确定为什么。
我有以下代码:
client.DefaultRequestHeaders.Add("client_id", "<My client Id>");
client.DefaultRequestHeaders.Add("locale", "en-gb");
client.DefaultRequestHeaders.Add("currency", "gbp");
var request = new HttpRequestMessage()
{
RequestUri = new Uri($"https://api.airbnb.com/v2/listings/{id}"),
Method = HttpMethod.Get,
};
var task = client.SendAsync(request)
.ContinueWith((taskwithmsg) =>
{
var response = taskwithmsg.Result;
//var jsonTask = response.Content.ReadAsAsync<JsonResult>();
//jsonTask.Wait();
//var jsonObject = jsonTask.Result;
return response.Content;
});
task.Wait();
return task.Result;
我收到以下回复:
- response {StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Connection: close
Date: Tue, 04 Apr 2017 19:44:40 GMT
Server: AkamaiGHost
Mime-Version: 1.0
Content-Length: 291
Content-Type: text/html
Expires: Tue, 04 Apr 2017 19:44:40 GMT
}} System.Net.Http.HttpResponseMessage
有什么建议吗?
编辑:
Macceturra 明智地建议我尝试与 postman 联系。
我现在已经确定我可以在 postman 中调用电话并得到正确的回复。
最佳答案
您发送的请求将 client_id
作为 HTTP header ,而爱彼迎希望它作为 URL 参数。
此外,Airbnb 要求客户端发送一个Accept
(或User-Agent
)头,否则它仍然会返回“403 Forbidden”(可能应该是“400 错误请求”)。
将它们放在一起(并删除不必要的 header ):
var id = ...;
var clientId = ...;
var uri = new Uri($"https://api.airbnb.com/v2/listings/{id}?client_id={Uri.EscapeDataString(clientId)}&locale=en-gb¤cy=GBP");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
await client.GetAsync(uri);
关于c# - 从 C# 调用 AirBnb api 时出现 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216388/