javascript - 用javascript做一个简单的get请求
问题描述
我正在尝试在 javascript 中进行一些简单的网络抓取,以从美味或美味的网站获取 html 代码来存储食谱。一个例子是这个网站:https ://www.delish.com/cooking/recipe-ideas/a27469586/baked-zucchini-recipe/ 但是,当我使用 fetch 时,我无法让它工作。
我实际上在 python 中编写了我希望能够翻译成 javascript 的等效代码。这是粘贴在这里:
import requests
url = "https://www.delish.com/cooking/recipe-ideas/a27469586/baked-zucchini-recipe/"
r = requests.get(url)
text = str(r.content)
当我使用不同的站点时,我能够让 javascript 代码工作。例如,这对我有用
fetch('https://api.github.com/users/maecapozzi')
.then(res => console.log('response: ', res))
.catch(console.error)
但是在尝试我的网站时出现错误:
CORS 策略已阻止从源“ http://localhost:3000 ”获取“ https://www.delish.com/cooking/recipe-ideas/a27469586/baked-zucchini-recipe ”的访问权限:无“访问权限” -Control-Allow-Origin' 标头存在于请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。index.js:1375 TypeError: 获取失败
我不确定这到底意味着什么,因为我对这一切都很陌生,所以任何帮助都将不胜感激!
解决方案
“跨域资源共享( CORS ) 是一种机制,它使用额外的 HTTP 标头告诉浏览器让在一个源(域)运行的 Web 应用程序有权访问来自不同源的服务器的选定资源。Web 应用程序当它请求一个与它自己的来源不同的来源(域、协议和端口)的资源时,执行一个跨域 HTTP 请求。
跨域请求示例:从http://domain-a.com提供的 Web 应用程序的前端 JavaScript 代码使用 XMLHttpRequest 发出对http://api.domain-b.com/data.json的请求.
出于安全原因,浏览器会限制从脚本中发起的跨域 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一源请求 HTTP 资源,除非来自其他源的响应包含正确的 CORS 标头。”
来自:https ://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
基本上,服务器管理员专门实施 CORS 策略以防止您尝试执行的操作,即通过您站点上运行的代码访问另一个站点的内容。除非您要访问的服务器允许这种访问,或者通过非限制性 CORS 策略或像 Github 这样的可公开访问的 API,否则您将无法做您想做的事情。
推荐阅读
- r - stat_summary 条形图标签
- outlook - 如何使用javax mail api读取保存在PC本地目录下的Outlook电子邮件
- c - 从 az 生成随机字母
- spring-integration - 入站通道适配器不基于执行程序进行扩展
- swift - 在使用 SwiftUI 在导航栏中调用模式视图时,我在关闭模式视图时遇到问题
- asp.net-mvc - asp.Net Core ViewComponent 不显示 CSS
- javascript - 如何在多个数字状态之间振荡和补间?
- python - 使用 pytest-bdd 背景设置多行
- sql - 如何使用 SQL 数据透视表将数据行转换为列
- python - 如何进行 Flask-SQLAlchemy 池化?