我在我的django项目中有一个套接字服务器django-socketio (正常工作),我尝试使用以下代码为它发送消息:
import socket
import json
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1' , 9000))
data = {
'username': 'avt',
'password': 123,
'amount': 100
}
message = json.dumps(data)
s.sendall(message)
收到错误:
<socket fileno=5 sock=127.0.0.1:9000 peer=127.0.0.1:58952>: Invalid HTTP method: '{"username": "avt", "amount": 100, "password": 123}'
答案 0 :(得分:1)
您正在与WebSocket服务器通信。因此,您需要使用WebSocket协议。
您的代码将以下字符串发送到服务器:
{"username": "avt", "amount": 100, "password": 123}
但你实际上需要发送这样的东西(开始协议握手):
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:9000
Origin: http://127.0.0.1:9000
Sec-WebSocket-Key: gCJZxvFvQ2Wa/flhLUvAtA==
Sec-WebSocket-Version: 13
上述请求是使用websocket-client使用以下代码生成的:
import json
import websocket
ws = websocket.WebSocket()
ws.connect('ws://127.0.0.1:9000/')
ws.close()
您可以尝试使用WebSocket echo服务器:
ws.connect('ws://echo.websocket.org/')
# now you can send data...
data = {
'username': 'avt',
'password': 123,
'amount': 100
}
>>> ws.send(json.dumps(data))
57
>>> ws.recv()
'{"username": "avt", "amount": 100, "password": 123}'
答案 1 :(得分:0)
您的django应用程序需要有效的HTTP请求(如此处所述:http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html),而不仅仅是json转储。因此,您需要手动编写(正确的)完整的HTTP请求,或使用更高级别的工具,例如stdlib&#39; s urllib
,或者更好的是,第三部分&#34;请求&#34 ; lib(http://docs.python-requests.org/en/latest/)。