2016-11-27 1 views
0

У меня есть SimpleHTTPServer в малине pi, работающий с скриптом python, который выполняется в том же каталоге, что и на веб-странице index.html. Код выглядит следующим образом:Извлечь данные из запросов на получение в python

#!/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() 

После загрузки веба-страница, он начинает посылать различные запросы GET с данными, которые мне нужно читать с моим питоном скрипт, но я не знаю, как это сделать.

Это пример запросов на получение;

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 - 

Не беспокойтесь об ошибке 404, по-видимому, потому что полотно имеет различные значки, которые я не занесенные в каталог еще потому, что я делаю тесты.

Причина, по которой я хочу это сделать, потому что я «переводил» веб-сервер для управления электромагнитным клапаном и различными датчиками, которые я работал на Arduino Yun. В arduino код считывает запросы на получение и в зависимости от того, что является запросом получения, запрашивая его ответы с пакетом XML с данными датчика или он действует на клапан.

На ардуине код для «улавливания» запроса на получение в виде строки следующий:

if (client) { // got client? 
     String request = client.readString(); 
     request.trim(); 

И затем программа ищет слово в строке и в зависимости от того, какое слово найдено, ответы с различной информацией. Пример;

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, я хочу, чтобы читать запросы GET в виде строки в моем питона сценарии и извлекать из них данные, а затем ответ с XML, но я думаю, что этот последний шаг будет лучше объяснить в интернете так Я не беспокоюсь об этом.

Надеюсь, что моего объяснения было достаточно ясно.

Спасибо !!!

+0

Вы пытаетесь разобрать сообщения журнала веб-сервера? – MYGz

+0

Это был бы вариант. – gcp900

ответ

0

Так вы можете сделать запрос по адресу. Объекту ответа присваивается переменная. Затем вы можете извлечь из него все, что хотите.

>>> 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

Спасибо за ваш ответ, но должен быть лучший способ сделать это. Разве нет возможности читать запросы на получение напрямую, а не просто читать журнал? – gcp900

+0

На самом деле я не мог полностью понять, что вы пытаетесь сделать. Вы можете сделать запрос и прочитать данные с помощью модуля запросов в python. Можете ли вы сказать мне, что именно вы ищете? – MYGz

+0

Simplehttpserver обслуживает веб-порт на порту 8080. Я представляю адрес малины и порт для удаленного доступа к сети из моего браузера. После загрузки в сеть он получает запросы от моего браузера к серверу малины для получения данных от температурного датчика (например), а затем мой скрипт python должен распознать запрос на получение и отправляет данные в формате XML. Теперь ты понимаешь? Спасибо за вашу помощь. – gcp900

Смежные вопросы