当从我的网站向运行CherryPy的Python服务器创建发布请求时,我收到错误对XMLHttpRequest的访问已被CORS策略阻止:请求头字段内容类型不被飞行前响应中的访问控制允许头允许
.我可以用一个“CORS Everywhere”浏览器扩展暂时解决这个问题,但是
以下是相关代码:
从网站post请求调用CherryPy Python函数
@cherrypy.expose
@cherrypy.tools.json_in()
def add_meeting(self):
data = None
id = None
start_time = None
end_time = None
title = None
userlist = None
result = {"operation": "request", "result": "success"}
if cherrypy.request.method == "POST":
data = cherrypy.request.json
id = data["id"]
start_time = data["start_time"]
end_time = data["end_time"]
title = data["title"]
userlist = data["userlist"]
# Rest of relevant code in function is left out, to take up less
# space and not post irrelevant code. That being said, I am
# positive the logic is correct, as it originally ran smoothly
# with a "Cors Everywhere" Browser Extension.
return result
这是我设置和运行CherryPy的区域
def main():
# Create the configuration file parser object and start the CherryPy server
config = ConfigParser.ConfigParser()
config.read(CONFIG_FILE)
port = config.getint('Meta', 'port')
host = config.get('Meta', 'host')
cherrypy.config.update({'server.socket_port': port,
'server.socket_host': host,
'tools.CORS.on': True})
cherrypy.quickstart(Coordinator(config))
main()
这是上面代码中提到的配置文件(CONFIG_FILE)
[Meta]
host = 0.0.0.0
port = 3000
# Rest is left out, as it is irrelevant with problem
def CORS():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
用樱桃汤。CORS=樱桃味。工具('before_handler',CORS)
2.在cherrypy.config中添加“'CORS.expose.on':True”。上面的更新
3.使用我在网上找到的cherrypy cors Python库:https://pypi.org/project/cherrypy-cors/
4.在配置中包含标头。更新Python文件的一部分
5.在“def add_meeting”之前添加“@cherrypy.tools.accept(media='application/json')”
我已经分别尝试了上面的解决方案,有些有,有些没有,但我仍然卡住了。也许这些解决方案中的一些是部分正确的,我的代码需要一些额外的东西。我不确定;我就是无法让它工作。在此之前,我没有太多的Web开发经验,所以也许(希望)解决方案非常简单。我知道代码是有效的,我只是无法让它运行,如果没有为每个用户提供一个有效的“Cors到处”浏览器扩展。
至于我正在运行的版本:我使用的是CherryPy 14.2.0和Python 2.7.6
任何帮助对我来说都意味着绝对的世界,谢谢。
所以首先,您需要在处理OPTIONS
请求时设置飞行前标头,您可以在那里列出允许的方法。然后,您还需要启用cors.expose
工具。
在< code>cherrypy-cors的docstring中有一些用法提示。例如,当使用< code>MethodDispatcher时,您可以用< code > @ cherrypy _ CORS . tools . preflight()来修饰< code>OPTIONS处理程序方法,而不是在每个HTTP处理程序中都这样做。
下面是一个简单的遍历示例(没有方法调度程序)。要测试它,请访问 http://127.0.0.1/,它将针对 http://localhost:3333/add_meeting 发出请求,就 CORS 而言,这是一个不同的源
(“本地主机”!= '127.0.0.1'
)。
"""Example of CORS setup using cherrypy-cors library."""
import cherrypy
import cherrypy_cors
# Python 2 compat: make all classes new-style by default
__metaclass__ = type # pylint: disable=invalid-name
class WebRoot:
"""Root node for HTTP handlers."""
@cherrypy.expose
def index(self): # pylint: disable=no-self-use
"""Render a web page handling request against ``/``.
Contains client JS snippet which will query the API endpoint.
It will be executed by the browser while loading the page.
"""
return """<html>
<script type="text/javascript">
async function addMeeting() {
/*
* Example coroutine for querying /add_meeing
* HTTP endpoint. It uses localhost as in the URL.
* For testing CORS, make sure to visit
* http://127.0.0.1/ which is a different origin
* from browser's perspective.
* /
const request_payload = {
some: 'data',
listed: ['h', 'er', 'e'],
}
try {
const resp = await fetch(
'http://localhost:3333/add_meeting',
{
method: 'POST',
mode: 'cors', // Required for customizing HTTP request headers
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json; charset=UTF-8', // Required for ``cherrypy.tools.json_in`` to identify JSON payload and parse it automatically
},
body: JSON.stringify(request_payload),
},
)
const json_resp = await resp.json()
console.log(json_resp) // Will print: {"method": "POST", "payload": {"listed": ["h", "er", "e"], "some": "data"}}
} catch (e) {
console.warn('Exception: ' + e)
}
}
async function main() {
await addMeeting()
}
main() // Entry point
</script>
</html>""" # noqa: E501
@cherrypy.expose
@cherrypy.tools.json_in() # turn HTTP payload into an object; also checking the Content-Type header
@cherrypy.tools.json_out() # turn ``return``ed Python object into a JSON string; also setting corresponding Content-Type
def add_meeting(self):
"""Handle HTTP requests against ``/add_meeting`` URI."""
if cherrypy.request.method == 'OPTIONS':
# This is a request that browser sends in CORS prior to
# sending a real request.
# Set up extra headers for a pre-flight OPTIONS request.
cherrypy_cors.preflight(allowed_methods=['GET', 'POST'])
if cherrypy.request.method == 'POST':
return {'method': 'POST', 'payload': cherrypy.request.json}
return {'method': 'non-POST'}
def main():
"""Set up and run the web app.
Initializes CORS tools.
Sets up web server socket.
Enables the CORS tool.
"""
cherrypy_cors.install()
cherrypy.config.update({
'server.socket_host': '127.0.0.1',
'server.socket_port': 3333,
'cors.expose.on': True,
})
cherrypy.quickstart(WebRoot())
__name__ == '__main__' and main() # pylint: disable=expression-not-assigned
使用lodash es,我们可以挑选如下模块:
我注意到,当我在JVM 7和JVM 8上运行JavaFX应用程序时,我得到了不同的默认外观。如何将每个JVM上的默认皮肤设置为相同?
点击各播放器的编辑按钮,进入具体播放器编辑页面。 播放器编辑页面 基础类、展示类可编辑设置项如下图所示: 项目 基础类播放器 展示类播放器 皮肤外观 5款 2款 LOGO √ √ 缓冲片头 √ √ 右侧菜单-系统 默认开启 默认关闭 右侧菜单-自定义 √ √ 综合功能-面板自动隐藏 √ - 综合功能-分享设置 √ √ 播放列表 √ √ 域名限制 √ √ 视频推荐 √ √ 1)设置播放器皮肤 进入具
问题内容: 我正在尝试使用JavaFX中的WebView入门,但是当尝试打开WebView时,我收到以下所示的错误,我该如何解决此问题? 问题答案: 尝试运行WebView时遇到任何错误时,请确保您的VM选项包含模块javafx.web。 虚拟机选项: 在IntelliJ中,您可以通过转到IDE右上方的“编辑配置”按钮来访问VM选项。
问题内容: 我已经使用数据库中的SQL数据库开发了一个窗口服务,该数据库中的记录已满,因此查询执行需要很多时间,而默认命令超时是30S,但我想将其增加到120S。 但是我的应用程序中有很多方法,因此我想从APP.config文件中进行设置,这样它将适用于应用程序级别,任何人都可以告诉我如何实现此目标 谢谢 问题答案: 实现此目的的最简单方法是在类似以下内容的地方添加新条目: 然后,创建一个将填充值
问题内容: 我有一个模型: 如何编写基于类的视图,该视图创建新的模型实例并将外键设置为? 问题答案: 我通过覆盖方法解决了这个问题。下面是详细说明的样式: 但是我们可以简短地说(感谢dowjones123),在docs中提到了这种情况。