调用非官方 Airbnb API 时出现 CORS 错误 [关闭]
Posted
技术标签:
【中文标题】调用非官方 Airbnb API 时出现 CORS 错误 [关闭]【英文标题】:CORS error while calling the unofficial Airbnb API [closed] 【发布时间】:2017-08-18 20:55:10 【问题描述】:我一直在尝试使用来自 this link 的 Airbnb API。我知道它不是官方 API,但我真的需要在我的网站上使用它。但我越来越 CORS(跨域资源共享)错误,我无法调用 API。当我从 hurl.it 尝试时,它工作得非常好。
但现在我不确定如何纠正这个问题?我在后端使用 ruby on rails 和 jQuery Ajax 来调用 API。我的 Ajax 代码调用如下。我正在使用此代码在 Airbnb 中创建一个空列表作为房东。
$("#submit_apartments").on("click", function()
$.ajax(
type: "POST",
url: "https://api.airbnb.com/v1/listings/create?client_id=3092nxybyb0otqw18e8nh5nty",
headers:
"Content-Type": "application/json; charset=UTF-8",
"X-Airbnb-OAuth-Token": "myAuthToken"
,
data:
room_type_category: "private_room",
property_type_id: 2,
bathrooms: 1,
person_capacity: 1,
beds: 1,
bedrooms: 1,
city: "Sunnyvale, California, US"
,
success: function()
console.log("Sucess");
,
error: function(xhr,err)
console.log("Error!!!");
);
);
【问题讨论】:
【参考方案1】:要在网络应用程序中通过客户端 javascript 使用 Airbnb API,您需要使用来自 https://github.com/cyu/rack-cors 或类似代码的代码设置自己的 CORS 代理,或者您可以通过开放的 CORS 代理发送请求比如https://cors-anywhere.herokuapp.com/:
$.ajax(
type: "POST",
url: "https://cors-anywhere.herokuapp.com/https://api.airbnb.com/v1/listings/create?client_id=3092nxybyb0otqw18e8nh5nty",
…
CORS 代理会将请求发送到 Airbnb API 端点,然后当它从 Airbnb 收到响应时,它会将 Access-Control-Allow-Origin
响应标头和所有其他需要的 CORS 标头添加到它传递给浏览器的响应中,然后浏览器看到的。
但是,请注意,您可能真的不想使用第三方开放代理向任何需要 X-Airbnb-OAuth-Token
访问令牌的登录端点发送请求,因为代理的所有者将能够看到您的 X-Airbnb-OAuth-Token
值并重复使用它。
所以你真的应该设置自己的代理,使用https://github.com/cyu/rack-cors 或类似的。
通过这样的代理发出请求是唯一可行的方法,因为 Airbnb API 本身不会发送 CORS 协议所需的 Access-Control-Allow-Origin
响应标头,而且似乎也不支持替代方案允许您指定回调名称,以便获得 JSONP 格式的响应。
这意味着无法直接从运行在网络应用程序中的客户端 JavaScript 调用 Airbnb API,因为浏览器根本不允许您的客户端 JS 代码访问响应。
要确认这一点,请尝试向任何端点 URL 请求其 API 并查看响应标头:
curl -i -H "Origin: http://example.com" \
"https://api.airbnb.com/v2/search_results?client_id=3092nxybyb0otqw18e8nh5nty"
您将获得的响应标头:
HTTP/1.1 200 OK
Server: nginx/1.7.12
Content-Type: application/json; charset=utf-8
Status: 200 OK
Content-Security-Policy: default-src 'self' https:; connect-src 'self' https: ws://localhost.airbnb.com:8888 http:; font-src 'self' data: *.muscache.com fonts.gstatic.com use.typekit.net; frame-src *; img-src 'self' https: http: data:; media-src 'self' https:; object-src 'self' https:; script-src 'self' https: 'unsafe-eval' 'unsafe-inline' http:; style-src 'self' https: 'unsafe-inline' http:; report-uri /tracking/csp?action=index&controller=v2&req_uuid=cd9b2eb5-5014-4587-8f6b-144c800b6d7b&version=b11f4837d2aaab4f25311eaabfd788770abc5557;
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Cache-Control: no-store, max-age=0, private, must-revalidate
ETag: W/"1dc7df77adc42a864c6a7a6806a68a6f"
X-UA-Compatible: IE=Edge,chrome=1
Strict-Transport-Security: max-age=10886400; includeSubdomains
Date: Sun, 26 Mar 2017 03:31:08 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Connection: Transfer-Encoding
请注意那里没有 Access-Control-Allow-Origin
响应标头。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 有更多 CORS 信息。
【讨论】:
以上是关于调用非官方 Airbnb API 时出现 CORS 错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从 Angular Js(Java Web)调用 API 时出现 CORS 错误
通过 Office Scripts Fetch 调用 API 时出现 CORS 问题
从 localhost Vue 项目调用 api 时出现 NodeJS CORS 错误
Angular 调用 Eureka API 时出现 CORS 来源错误