Ich habe ein einfaches Ruby-Skript, um Datei auf den Server/Web-App über TCP-Verbindung hochladen, aber es funktioniert nicht.Wenn ich das Skript ausführen geschieht nichts auf der Web-App/Serverseite. Der Server funktioniert gut, da ich versucht habe, Datei mit CURL hochzuladen, und es hochgeladen hat. Werfen Sie einen Blick auf meinen Code unten und lassen Sie mich wissen, was ich falsch mache. Ich verwende ruby 1.9.2-p290. Danke im Voraus.Einfache Ruby-TCP-Anfrage trifft den Server nicht
require 'socket'
host = "myapp.herokuapp.com"
port = 80
client = TCPSocket.open(host, port)
client.print("POST /api/binary HTTP/1.1\r\n")
client.print("Host: myapp.herokuapp.com\r\n")
client.print ("Accept: */* \r\n")
client.print ("Content-Type: multipart/form-data;boundary=AaB03x \r\n")
client.print("\n" + "AaB03x"+ "\n" "Content-Disposition: form-data; name='datafile'; filename='cam.jpg' \n Content-Type: image/jpeg \r\n")
client.print ("\r\n")
data = File.open("./pic.jpg", "rb") {|io| io.read}
client.print (data)
client.print ("\r\n")
client.print("boundary=AaB03x\r\n")
client.close
IRB Konsole
>require 'socket'
=> true
> client = TCPSocket.open("myapp.herokuapp.com", 80)
=> #<TCPSocket:fd 3>
> client.print("GET /api/users HTTP/1.1")
=> nil
> client.print("POST /api/binary HTTP/1.1")
=> nil
Bitte beachten Sie: '' print' verwendet write' intern, aber das Ergebnis nicht überprüft - dies bedeutet, dass ** dort alle keine Garantie gibt, werden die Daten ** gesendet werden. Je mehr auf Socket-Programmierung und erwägen, 'write' und' select' zu verwenden, um einen blockierenden Schreibvorgang zu emulieren, der blockiert, bis alle Daten gesendet wurden, oder eine ausgeglichene/threaded-Lösung zu verwenden, um alle Daten zu schreiben, die nicht das erste Mal geschrieben wurden . – Myst
Wie ist dieses WebSocket verwandt? (Ich erinnere Sie daran, dass Websocket der Name eines Kommunikationsprotokolls ist, es ist kein Name für TCP/IP-Sockets) ... Bitte entfernen Sie das 'websocket'-Tag, wenn es nicht relevant ist. – Myst