Soz*_*Soz 8 python json websocket telescope
为了更好地理解如何在基本的hello-world之外使用websockets,我自己设置了使用websockets和JSON从页面获取一些数据的任务(因为gitxiv的源代码很容易获得,我选择查看http: //gitxiv.com/day/2015/12/31).
通过Python连接到这个websocket似乎很简单
from websocket import create_connection
import websocket
import pprint
websocket.enableTrace(True)
ws=create_connection("ws://gitxiv.com/sockjs/212/2aczpiim/websocket")
result = ws.recv()
print "Received '%s'" % result
result = ws.recv()
print "Received '%s'" % result
Run Code Online (Sandbox Code Playgroud)
我不完全清楚ws:// url中的变量,比如'212'.运行此代码似乎可靠地连接(虽然总是有可能在那里没有正确的变量导致服务器拒绝合作以后?)
现在,如果我观察Firefox和gitxiv页面之间的通信,我会看到服务器发送的websocket连接之后
o
a["{\"server_id\":\"0\"}"]
Run Code Online (Sandbox Code Playgroud)
上面的脚本得到相同的响应,因此似乎连接成功.
然而,这是我绊倒的地方.通信的下一步是我的浏览器向Web服务发送了大量信息,例如:
"["{\"msg\":\"connect\",\"version\":\"1\",\"support\":[\"1\",\"pre2\",\"pre1\"]}"]"
Run Code Online (Sandbox Code Playgroud)
使用ws.send()直接发送这些行会导致"破坏框架".仅发送:
controlstr='{"msg":"connect","version":"1","support":["1","pre2","pre1"]}';
ws.send(controlstr)
Run Code Online (Sandbox Code Playgroud)
导致发送的内容看起来像:
send: '\x81\xbd\xef\x17F8\x945+K\x885|\x1a\x8cx(V\x8at2\x1a\xc350]\x9dd/W\x815|\x1a\xde5j\x1a\x9cb6H\x80e2\x1a\xd5Ld\t\xcd;dH\x9drt\x1a\xc356J\x8a&de\x92'
Run Code Online (Sandbox Code Playgroud)
我得到一个不同的错误:
'a["{\\"msg\\":\\"error\\",\\"reason\\":\\"Bad request\\"}"]'
Run Code Online (Sandbox Code Playgroud)
因此,似乎我将此JSON消息发送到websocket的方式有问题.有人知道它期望的格式,以及如何使用websocket/websocket-client实现它?任何澄清/建议都将受到欢迎.
我希望发送的JSON消息是Firefox的Websocket开发人员工具报告的消息:这是一个截图:
Way*_*ner 10
如果你仔细查看通过浏览器发送的内容,请注意它是:
["{\"msg\":\"connect\"}"]
Run Code Online (Sandbox Code Playgroud)
这看起来很像JSON字符串数组.确实,如果你试图复制它:
ws.send(json.dumps([json.dumps({'msg': 'connect', 'version': '1', 'support': ['1', 'pre2', 'pre1']})]))
Run Code Online (Sandbox Code Playgroud)
你会看到你得到了联系.这是我的整个代码:
import json
import pprint
import websocket
from websocket import create_connection
websocket.enableTrace(True)
ws = create_connection('ws://gitxiv.com/sockjs/212/2aczpiim/websocket')
result = ws.recv()
print('Result: {}'.format(result))
result = ws.recv()
print('Result: {}'.format(result))
ws.send(json.dumps([json.dumps({'msg': 'connect', 'version': '1', 'support': ['1', 'pre2', 'pre1']})]))
result = ws.recv()
print('Result: {}'.format(result))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12901 次 |
| 最近记录: |