2017-01-25 2 views
0

私はPythonでwebsocketに問題があります。私は、コンテンツ通信のいくつかのためにウェブソケットを使用するウェブサイトとインターフェースを取ろうとしています。ここで自分のサイト上のjavascriptのコードは次のとおりです。開けた直後にPython Web Socketが閉じる

var $j = jQuery.noConflict(); // Use $j to reference JQuery selectors instead of $ 
function sockify() { 
    var ws = new WebSocket("ws://website:1234"); 
    ws.onmessage = function (evt) { 
     console.log(evt.data) 
     $j('#output').html(evt.data); 
    } 
    ws.onopen = function() { 
     ws.send(JSON.stringify($j('#srctext').val())); 
    } 
    ws.onerror = function() { 
     alert("socket down"); 
    } 
} 

ので、サイトが正常に動作し、そしてそれを何の問題をtheresの、私はこのPythonコードをしようとするが、私はソケットが直後に閉じられたことを示すエラーを取得しますそれが開きますwebsocket man page on python.orgから引き出さ

ws = create_connection("ws://website:1234/") 
print "Sending 'Hello, World'..." 
ws.send("Hello, World") 
print "Sent" 
print "Receiving..." 
result = ws.recv() 
print "Received '%s'" % result 
ws.close() 

をこのサンプルコードで、私はからプルしようとしているWebサイトにホストを変更するのではなく、そのままでは例のホストを残していない場合には、作業を行いますこの例では、ここで

はエラーが私が受信されます。

Traceback (most recent call last): 
    File "irc.py", line 462, in <module> 
    tmpmsg = getSocket() 
    File "irc.py", line 64, in getTrump 
    result = ws.recv() 
    File "/Library/Python/2.7/site-packages/websocket/_core.py", line 293, in recv 
    opcode, data = self.recv_data() 
    File "/Library/Python/2.7/site-packages/websocket/_core.py", line 310, in recv_data 
    opcode, frame = self.recv_data_frame(control_frame) 
    File "/Library/Python/2.7/site-packages/websocket/_core.py", line 323, in recv_data_frame 
    frame = self.recv_frame() 
    File "/Library/Python/2.7/site-packages/websocket/_core.py", line 357, in recv_frame 
    return self.frame_buffer.recv_frame() 
    File "/Library/Python/2.7/site-packages/websocket/_abnf.py", line 336, in recv_frame 
    self.recv_header() 
    File "/Library/Python/2.7/site-packages/websocket/_abnf.py", line 286, in recv_header 
    header = self.recv_strict(2) 
    File "/Library/Python/2.7/site-packages/websocket/_abnf.py", line 371, in recv_strict 
    bytes_ = self.recv(min(16384, shortage)) 
    File "/Library/Python/2.7/site-packages/websocket/_core.py", line 427, in _recv 
    return recv(self.sock, bufsize) 
    File "/Library/Python/2.7/site-packages/websocket/_socket.py", line 93, in recv 
    "Connection is already closed.") 
websocket._exceptions.WebSocketConnectionClosedException: Connection is already closed. 

任意のアイデアを、なぜそのクロージングすぐに?

編集:

enableTraceを指定して無効にします。ここで

は私が取得エラーです:

--- request header --- 
GET/HTTP/1.1 
Upgrade: websocket 
Connection: Upgrade 
Host: website 
Origin: website 
Sec-WebSocket-Key: 6jsV5DEWXPGTTTLKSEwz6g== 
Sec-WebSocket-Version: 13 


----------------------- 
--- response header --- 
HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: CX4DYsItQC6utXvt8JH641455mM= 
----------------------- 
send: '\x81\x8b\x98\x8d\x81\xce\xd0\xe8\xed\xa2\xf7\xad\xd6\xa1\xea\xe1\xe5' 

私は実際のWebSocketを管理しているいけないので、任意の修正が私の最後にする必要がありますのでご注意ください。私はPython上にあります。2.7.10

ウェブサイトの使用中にBurpでwebsocketリクエストをインターセプトすると、websocketの初期接続要求が異なることに気付きました。ウェブサイトから取り込んだとしてここにある:

GET/HTTP/1.1 
Host: website 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Sec-WebSocket-Version: 13 
Origin: website 
Sec-WebSocket-Extensions: permessage-deflate 
Sec-WebSocket-Key: uyG2WBK51ZtPhy9RXLNTmg== 
Connection: keep-alive, Upgrade 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade: websocket 
+0

この問題を抱えている人にとって、私はあなたにとって素晴らしい解決策はありません。私はちょうどサイトを読み込み、フィールドを入力し、ボタンをクリックし、そこからの応答を読むためにセレンとファントムを使用しました。非常にオーバーヘッドですが、それは私の小さなペットプロジェクトのために働いていました。 – Sugitime

+0

websocketは 'Hello、World'を受信したくないようです。 –

答えて

0

あなたはエラー確認のために持っている(おそらくあなたのソケットが静かに爆発します。..)の構成に代わりソケットのエラーのためコールバックを設定し

そしてあなたが得るMSG ..

例印刷:(hereから撮影)

websocket.enableTrace(True) 
ws = websocket.WebSocketApp("ws://echo.websocket.org/", 
           on_message = on_message, 
           on_error = on_error, 
           on_close = on_close) 

をしてメソッドを定義

def on_error(ws, error): 
    print error 
+1

これをして、私の元の投稿の下に結果を投げました。 – Sugitime

関連する問題