【问题标题】:Octoprint Javascript API Socket issuesOctoprint Javascript API 套接字问题
【发布时间】:2019-02-21 00:06:40
【问题描述】:

我正在使用 Octoprint Javascript API (http://docs.octoprint.org/en/master/jsclientlib/index.html) 为学校项目制作仪表板以同时查看多台打印机。这将在与我的 OctoPi 完全分离的 Web 服务器上运行。我一直在使用 REST API 来获取数据,但始终无法让套接字正常工作。我发现了 Javascript API 并已将其用于基本请求,但希望与套接字连接以获取有关打印机状态的更新数据。很简单,我在我的 HTML 中添加了以下几行并进行了一些测试:

<script src="sockjs.min.js"></script> (Downloaded a copy of sockjs from their github page yesterday)
<script src="packed-client.js"></script> (Downloaded this by opening octopi.local and copying the source)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<body>
        <div id="test_area"></div>

        <script>
                OctoPrint.options.baseurl = (my ip here);
                OctoPrint.options.apikey = (api key here);

                OctoPrint.socket.connect();

                OctoPrint.socket.onMessage("*", function(message){
                       document.getElementById('test_area').innerHTML = response;
                });
        </script>
</body>

onMessage 处理程序甚至永远不会触发。我在 Chrome 中收到此错误:

XMLHttpRequest 无法加载http://(my ip 在这里)/sockjs/info?t=1490302299698。的价值 响应中的“Access-Control-Allow-Origin”标头不能是 当请求的凭据模式为“包含”时,通配符“*”。起源 'null' 因此不允许访问。凭证模式 XMLHttpRequest 发起的请求由 withCredentials 属性。

CORS 和 SockJS 似乎存在问题。

这些是标题:

Request URL:http://(my ip here)/sockjs/info?t=1490302365251
Request Method:GET
Status Code:200 OK
Remote Address:(ip here):80
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:*
Cache-Control:no-store, no-cache, must-revalidate, max-age=0
Content-Length:77
Content-Type:application/json; charset=UTF-8
Date:Thu, 23 Mar 2017 20:52:45 GMT
Etag:"d88498e8b1e0e1a411f64eb3eb6e219315b36ef4"
Server:TornadoServer/4.0.2
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:session_P80=eyJfaWQiOnsiIGIiOiJNVGRrWm1OalpEZzRZV00xTkRNd1lqZzJOMkpsWkRCbU4yWTFaR1JpTmpZPSJ9fQ.C7W5Xg.DmKIY6AJktPrR8_8Es8wa9iBc10
Host:(ip here)
Origin:null
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36

任何想法如何使它工作?这是我能做的最基本的设置,但它不起作用。谢谢!

【问题讨论】:

    标签: javascript sockets printing octoprint


    【解决方案1】:

    好的,问题最终是我直接在浏览器中运行网站(通过 file:// 而不是通过网络服务器),加上从我的较大示例代码(响应与消息)复制过来的小错误变量名,加上我忘记复制其他代码中的 JQuery 导入)。 Octoprint 中还有一个错误导致订阅“*”不起作用,但根据开发人员的说法,下一个版本会修复。因此,简而言之,启动一个 Web 服务器,在新软件发布时获取它(1.3.3)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2017-04-15
      • 2011-01-03
      • 2010-12-19
      • 2011-06-17
      • 2011-08-11
      相关资源
      最近更新 更多