2016-11-27 8 views
0

Ich habe einen SimpleHTTPServer in einem Raspberry Pi, der mit einem Python-Skript arbeitet, das im selben Verzeichnis wie die index.html-Webseite ausgeführt wird. Der Code ist der folgende:Daten aus Get-Anfragen in Python extrahieren

#!/usr/bin/python 

import SimpleHTTPServer 
import SocketServer 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 
import httplib2 

PORT = 8080 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 

httpd = SocketServer.TCPServer(("", PORT), Handler) 

print "serving at port", PORT 
httpd.serve_forever() 

Sobald die Webseite geladen wird, beginnt es verschiedene get-Anforderungen mit Daten zu senden, die ich brauche mit meinem Python-Skript zu lesen, aber ich weiß, don, wie es geht.

Dies ist ein Beispiel für die get-Anfragen;

10.8.0.6 - - [27/Nov/2016 11:18:07] code 404, message File not found 
10.8.0.6 - - [27/Nov/2016 11:18:07] "GET /ok.png HTTP/1.1" 404 - 
10.8.0.6 - - [27/Nov/2016 11:18:07] code 404, message File not found 
10.8.0.6 - - [27/Nov/2016 11:18:07] "GET /red.png HTTP/1.1" 404 - 
10.8.0.6 - - [27/Nov/2016 11:18:07] code 404, message File not found 
10.8.0.6 - - [27/Nov/2016 11:18:07] "GET /arduino/start/0.16388046142178503 HTTP/1.1" 404 - 
10.8.0.6 - - [27/Nov/2016 11:18:07] code 404, message File not found 
10.8.0.6 - - [27/Nov/2016 11:18:07] "GET /favicon.ico HTTP/1.1" 404 - 
10.8.0.6 - - [27/Nov/2016 11:18:17] code 404, message File not found 
10.8.0.6 - - [27/Nov/2016 11:18:17] "GET /arduino/update/0.6913944096802204 HTTP/1.1" 404 - 

Sorgen Sie sich nicht um die 404-Fehler, es wird angezeigt, da die Bahn verschiedene Symbole hat, die ich noch nicht im Verzeichnis abgelegt habe, weil ich Tests tue.

Der Grund, weil ich das tun will, ist, weil ich einen Web-Server "übersetze", um ein Magnetventil und verschiedene Sensoren zu steuern, die ich auf Arduino Yun hatte. In arduino liest der Code die get-Anfragen, und abhängig davon, was die get-Anfrage ist, fragt er nach Antworten mit einem XML-Paket mit den Sensordaten oder er wirkt auf das Ventil.

Auf Arduino ist der Code zum "Abfangen" der Get-Anforderung als String wie folgt;

Und dann sucht das Programm nach einem Wort in der Zeichenfolge und je nachdem, welches Wort gefunden wird, antwortet es mit unterschiedlichen Informationen. Ein Beispiel;

if (request=="inicial") { 

         // send rest of HTTP header 
         client.println("Content-Type: text/xml"); 
         client.println("Connection: keep-alive"); 
         client.println(); 
         // send XML file containing input states 
         inicial(client); 
        } 

Summaraizing, ich mag die GET-Anfragen als String in meinem Python-Skript lesen und Extrahieren von Daten aus ihnen, und dann Reaktion mit einem XML, aber ich denke, dieser letzte Schritt wird besser im Internet erklärte so Ich mache mir keine Sorgen.

Ich hoffe, meine Erklärung war genug klar.

Danke !!!

+0

Versuchen Sie, die Protokollmeldungen des Webservers zu analysieren? – MYGz

+0

Es wäre eine Option. – gcp900

Antwort

0

So können Sie eine Anfrage an eine Adresse stellen. Das Antwortobjekt ist der Variablen zugeordnet. Dann können Sie alles, was Sie wollen, daraus extrahieren.

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) 
>>> r.status_code 
200 
>>> r.headers['content-type'] 
'application/json; charset=utf8' 
>>> r.encoding 
'utf-8' 
>>> r.text 
u'{"type":"User"...' 
>>> r.json() 
{u'private_gists': 419, u'total_private_repos': 77, ...} 
+0

Danke für deine Antwort, aber es muss einen besseren Weg geben, das zu tun. Gibt es keine Möglichkeit, die get-Anfragen direkt zu lesen und nicht nur das Protokoll zu lesen? – gcp900

+0

Eigentlich konnte ich nicht ganz verstehen, was Sie zu tun versuchen. Sie können eine Anfrage stellen und die Daten mit dem Requests-Modul in Python lesen. Können Sie mir genau sagen, wonach Sie suchen? – MYGz

+0

Simplehttpserver bedient ein Web auf Port 8080. Ich stelle die Himbeer-Adresse und Port ein, um aus meinem Browser remote auf das Web zuzugreifen. Sobald das Web geladen ist, macht es Anfragen von meinem Browser an den Himbeer-Server, um Daten von einem Temperatursensor zu erhalten (zum Beispiel), und dann muss mein Python-Skript die Get-Anfrage erkennen und sendet die Daten im XML-Format zurück. Verstehst du es jetzt? Danke für Ihre Hilfe. – gcp900

Verwandte Themen