Forum: PC-Programmierung Daten mit curl -PUT auf Server senden


von Mik (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Gerät, das auf Ubuntu basiert über VPN mit meinem VPS 
verbunden.
Nun möchte ich regelmäßig einen Handshake durchführen, indem ein paar 
Daten zum Server gesendet werden.

Ich würde es gern über einen curl -PUT Befehl machen, um dem Gerät nicht 
den kompletten ssh Zugriff geben zu müssen.

Auf dem mobilen Gerät läuft ein Skript, in dem Momentan die 
entsprechende Zeile auskommentiert ist:
/usr/bin/curl -L -k -s -m 10 -X PUT -d "blablabla" http://VPN_IP_VOM_VPS

Kennt vielleicht jemand ein Tutorial, wie ich den VPS einrichten muss, 
damit er diese Daten "blablabla" verarbeiten btw. einer Datei anhängen 
kann?

Besten Dank schonmal :)

von Mitarbeiter (Gast)


Lesenswert?

Du brauchst auf deinem Apache (oder anderweitigem httpd) ein Script oder 
irgendwas was auf das PUT reagiert.

Du köntest ansonsten schauen ob du WebDAV zum laufen kriegst, das müsste 
cURL auch kennen.

Aber muss es denn HTTP sein? Könntest doch einen User anlegen mit 
eingeschränkten Rechten und dann SCP, oder spricht was dagegen?

von Mooskopf (Gast)


Lesenswert?

>Ich würde es gern über einen curl -PUT Befehl machen, um dem Gerät nicht
den kompletten ssh Zugriff geben zu müssen.

Wie kommst du drauf, dass ssh "kompleter Zugriff" bedeutet ?
Nebenbei ssh ist nie als root. Man logt als user ein. Und dieser user 
hat Rechte. Welche auch immer zugewiesen wurden.

von Mik (Gast)


Lesenswert?

Danke schonmal für die Tipps :)
Ich habe jetzt Apache und php7 installiert und eingestellt. Ebenfalls 
port 80 in der UFW freigegeben.
Nun muss ich noch das Skript erstellen, das auf den -PUT Befehl 
reagiert. Gibt es da irgendwo Beispiele? Irgendwie findet man zu diesem 
Thema schon echt wenig..

Ich möchte es schon gern über HTTP machen. Auch als Herausforderung :)

Viele Grüße

von nix (Gast)


Lesenswert?

Du hast also das Ressourcen fressende Monster Apache installiert, NUR um 
mit curl einen Put Befehl abzusenden?? Hätte es da nicht auch ein 
kleinerer Webserver getan (oder eben per ssh, scp, telnet was weiß 
ich...) ?

Cheers

von Mik (Gast)


Lesenswert?

Hmm, so wirklich weiter bringt mich das leider auch nich..

von Nik D. (nik_uc)


Lesenswert?

Ich weiß nicht genau was du mit "Skript" meinst, das auf den Befehl 
reagieren soll. Aber vlt hilft dir das hier weiter (Kein Apache oder 
Webserver benötigt!)

https://docs.python.org/3/library/http.server.html

ist ein simpler "http Server" bei dem du ziemlich einfach Request 
abfangen kannst.

(du kannst den "Server" einfach starten indem du: python -m http.server 
8082 ausführst)

Wenn du (genauer) erklärst was dein Skript machen soll kann ich dir vlt 
weiter helfen.

Grüße

P.S.:
1
 
2
#!/usr/bin/env python
3
4
import http.server
5
import os
6
7
class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
8
    def do_PUT(self):
9
        path = self.translate_path(self.path)
10
        self.send_response(405, "Method Not Allowed")
11
        self.wfile.write("PUT not allowed on a directory\n".encode())
12
        return
13
14
if __name__ == '__main__':
15
    http.server.test(HandlerClass=HTTPRequestHandler,port=8082, bind="localhost")
Ergibt beim ausführen:
1
 
2
GIT[master *] > python http.py                                                                                                  
3
Serving HTTP on 127.0.0.1 port 8082 (http://127.0.0.1:8082/) ...
4
127.0.0.1 - - [17/Jun/2017 13:45:14] "PUT / HTTP/1.1" 405 -

und auf Seiten des Curls:
1
> curl -L -k -s -m 10 -X PUT -d 'blablabla' http://0.0.0.0:8082                                                                                            
2
PUT not allowed on a directory

: Bearbeitet durch User
von Mik (Gast)


Lesenswert?

Cool, Danke. Habe es gerade mal ausprobiert. Schlägt leider fehl.

sudo python http.py
Traceback (most recent call last):
  File "http.py", line 3, in <module>
    import http.server
  File "/var/public_html/http.py", line 3, in <module>
    import http.server
ImportError: No module named server


Habe dann nach Google Suche einfach das hier auf dem Server ausgeführt:
sudo python -m SimpleHTTPServer 80

wenn ich dann vom Client den Put absende kommt am Server:

10.8.0.10 - - [17/Jun/2017 16:01:47] code 501, message Unsupported 
method ('PUT')
10.8.0.10 - - [17/Jun/2017 16:01:47] "PUT / HTTP/1.1" 501 -

Und am Client:
<head>
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code 501.
<p>Message: Unsupported method ('PUT').
<p>Error code explanation: 501 = Server does not support this operation.
</body>

Es tut sich also schonmal was:)) Danke!

Also, was die ganze Geschichte bewirken soll: Der Client soll alle 15 
min einen eine Nachricht abschicken: Zeit, seinen aktuellen Status, 
Passwort usw. Zusätzlich schickt er die MD5SUM mit. Der Server rechnet 
nach, ob die Nachricht korrekt angekommen ist und Antwortet mit "OK" und 
überschreibt die vorherigen Daten.

von Nik D. (nik_uc)


Lesenswert?

Zu dem 1. Fehler --> Wenn du python2 noch benutzt heißen die Libraries 
anders (siehe google).

Ah, okay, jetzt ergibt das Sinn. Gut, dann denke ich ist Python deine 
Wahl. Den String parsen usw kannst du dort ganz einfach machen. Den 
Grundstein dazu hast du ja jetzt.

Wenn man nach python http webserver sucht findet man viele Beispiele auf 
github usw.

Viel Spaß :)

von Mik (Gast)


Lesenswert?

Cool, die Stichworte haben mir gefehlt. Besten Dank nochmal :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.