- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过 Javascript 从单个 HTML(此文件不由 cherrypy 提供服务)文件发送 JSON 字符串到 cherrpy 服务器。
这是我最小的 cherrypy 示例 ( followed the "dealing with json" part )
import cherrypy
class HelloJson(object):
@cherrypy.expose
@cherrypy.tools.json_in()
def default(self):
data = cherrypy.request.json
print(data)
return "Hello world!"
if __name__ == '__main__':
cherrypy.config.update({'server.socket_port':1234})
cherrypy.quickstart(HelloJson())
通过 python 发送 JSON 字符串工作正常
>>> requests.post('http://localhost:1234', json=json.dumps({'Hello': 'Json'}))
<Response [200]>
>>>
cherrypy 输出也打印 json 字符串
20:59 $ ./HelloJson.py
[24/Aug/2015:20:59:34] ENGINE Listening for SIGTERM.
[24/Aug/2015:20:59:34] ENGINE Listening for SIGUSR1.
[24/Aug/2015:20:59:34] ENGINE Listening for SIGHUP.
[24/Aug/2015:20:59:34] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.
[24/Aug/2015:20:59:34] ENGINE Started monitor thread '_TimeoutMonitor'.
[24/Aug/2015:20:59:34] ENGINE Started monitor thread 'Autoreloader'.
[24/Aug/2015:20:59:34] ENGINE Serving on http://127.0.0.1:1234
[24/Aug/2015:20:59:34] ENGINE Bus STARTED
{"Hello": "Json"}
127.0.0.1 - - [24/Aug/2015:21:00:17] "POST / HTTP/1.1" 200 12 "" "python-requests/2.7.0 CPython/3.4.3 Linux/4.1.5-1-ARCH"
所以我的单个 HTML 文件看起来像这样
<html>
<head>
<script>
function makeRequest()
{
var insertJSON = { "my_key": "my_value" };
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
xmlhttp.open("POST", "http://localhost:1234");
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify(insertJSON));
}
</script>
</head>
<body>
<form name="frm1" id="yourTextBox" onsubmit="makeRequest()">
<input type="submit" value="Submit">
</form>
</body>
</html>
但这会导致错误 AttributeError: 'Request' object has no attribute 'json'
[24/Aug/2015:21:10:36] HTTP
Request Headers:
CONNECTION: keep-alive
ACCEPT-LANGUAGE: en-US,en;q=0.5
ACCESS-CONTROL-REQUEST-HEADERS: content-type
ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
USER-AGENT: Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0
ACCESS-CONTROL-REQUEST-METHOD: POST
ACCEPT-ENCODING: gzip, deflate
PRAGMA: no-cache
CACHE-CONTROL: no-cache
HOST: localhost:1234
Remote-Addr: 127.0.0.1
ORIGIN: null
[24/Aug/2015:21:10:36] HTTP Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/cherrypy/_cprequest.py", line 670, in respond
response.body = self.handler()
File "/usr/lib/python3.4/site-packages/cherrypy/lib/encoding.py", line 217, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/lib/python3.4/site-packages/cherrypy/_cpdispatch.py", line 61, in __call__
return self.callable(*self.args, **self.kwargs)
File "./HelloJson.py", line 15, in default
data = cherrypy.request.json
File "/usr/lib/python3.4/site-packages/cherrypy/__init__.py", line 224, in __getattr__
return getattr(child, name)
AttributeError: 'Request' object has no attribute 'json'
127.0.0.1 - - [24/Aug/2015:21:10:36] "OPTIONS / HTTP/1.1" 500 1515 "" "Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0"
我不知道我做错了什么。
最佳答案
您看到的 OPTIONS 请求是 CORS preflight request ,这显然不是 JSON 请求,您会看到错误。因为您从 file://
协议(protocol)(或其他主机)打开文件,并且 CherryPy 服务于 http://127.0.0.1:1234
你做跨域请求,以Same-Origin Policy为准.
解决此问题的最简单方法是同时通过 CherryPy ( Static content serving ) 提供 HTML 文件。困难的方法是提供适当的 CORS header 以允许跨域请求(请参阅 this answer )
关于javascript - 将 JSON 字符串发送到 cherrypy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32189741/
假设我有一些代码(使用 CherryPy),如下所示: import cherrypy class Names: def index(self, name=None): ret
{% if bCat2 == True %} True {% else %} False 返回 False即使 bCat2是 True . 谢谢, 安德鲁 最佳答案 选项 1:最常见的
我这里有一个Python程序。它使用 CherryPy 创建服务器。 # coding:utf-8 import os.path import cherrypy from app import app
我有一个现有的cherrypy应用程序,但我想知道是否可以在gevent wsgi服务器上运行它。我想我可以,但我无法访问 Linux 服务器来测试 gevent,并且无法让它在我的 Mac 上运行。
当我使用cherrypy.tree.mount时,我无法从系统连接到在docker容器中运行的CherryPy服务器,但是当我执行cherrypy.quickstart()时,我可以连接至服务器。对带
我开始学樱桃,但是遇到了路障。我无法获取静态文件来挽救生命。我正在搜索404。The path '/static' was not found.,但是尚未找到解决方案。我要做的就是在http://lo
运行 CherryPy 应用程序时,它会发送服务器名称标签,例如 CherryPy/version。 是否可以在不修改 CherryPy 的情况下从应用程序重命名/覆盖它,以便它显示其他内容? 也许像
CherryPy 服务器将其错误日志写入何处?我已经安装了 CherryPy 并使用 python3.2 启动了服务器 from cherrypy import wsgiserver
我正在开发一个 django 应用程序,我使用cherrypy作为服务器。 Cherrypy 为每个页面 View 创建一个新线程。我希望能够从它们中的任何一个中访问所有这些线程(负责与 django
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Using mappings in CherryPy 我如何将 url regEx(例如/data/[A-Z].tx
我知道这个问题比“如何加快我的网站的速度”要高出一个步骤,但是我到处都是由Cherrypy驱动的网站,却找不到任何电子商务网站。在开始重写当前站点之前,我们开始使用Cherrypy和jinja2作为概
我有一个cherrypy api,旨在在服务器上运行很长时间。 我有一个不可靠的客户端,它可能会因我无法控制的各种原因而终止或关闭连接。 在我的服务器 api 运行期间,我想定期检查连接状态,确保客户
这是我第一次使用 CherryPy,所以请原谅任何愚蠢的行为。 我正在尝试编写一个 RESTful API,该 API 部分处理添加/删除人员。我希望能够 GET/PUT/DELETE example
我想在不同的端口和不同的应用程序上运行 2 个cherry py 服务器。 我设法运行它们,但是如何在应用程序和服务器之间连接?我希望能够去 http://127.0.0.1:3141/ 并获取ser
有没有办法让 CherryPy 响应包含句点的 url,例如 http://some/base/path/oldscript.py ?我有许多像这样调用的旧 CGI 脚本,我正在尝试将它们整合到一个漂
使用 Cherrypy 如何制作此脚本以便任何 url 都将加载 load index.html 示例,如果使用其中任何一个,那么它们都会加载index.html页面www.mtsite.test/1
我尝试从具有 Transfer-Encoding: chunked header (没有 Content-Length)的 POST 正文中获取数据。内容类型是application/octet-st
我正在构建一个使用 CherryPy 提供 REST API 的应用程序,以及另一个执行后台工作的线程(实际上,它从串行端口读取数据)。 import cherrypy import threadin
我向 CherryPy 服务器添加了摘要身份验证,我想知道撤销用户身份验证的标准是什么,并提示他们再次输入凭据。删除 cookie 不会强制出现提示,但使用隐身或其他浏览器会强制出现提示。 我的配置:
我在启动 CherryPy 时遇到一些问题,我不明白为什么我总是收到此错误。这是版本和带有日志输出的相关代码。Python 2.7.6CherryPy 3.5.0(通过 PIP) CURRENT_DI
我是一名优秀的程序员,十分优秀!