Извлечение данных из запросов Get в python
У меня есть SimpleHTTPServer в Raspberry Pi, работающий со скриптом Python, который выполняется в том же каталоге, что и веб-страница index.html. Код следующий:
#!/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()
Когда веб-страница загружена, она начинает отправлять различные запросы на получение данных, которые мне нужно прочитать с помощью моего сценария Python, но я не знаю, как это сделать.
Это пример запросов 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 код считывает запросы get, и в зависимости от того, что запрос get запрашивает, он отвечает пакетом XML с данными датчика или воздействует на клапан.
В arduino код для "перехвата" запроса get в виде строки выглядит следующим образом;
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);
}
Подводя итог, я хочу прочитать запросы get в виде строки в моем скрипте Python и извлечь данные из них, а затем ответить с помощью XML, но я думаю, что этот последний шаг будет лучше объяснен в Интернете, поэтому я не беспокоюсь об этом,
Я надеюсь, что мое объяснение было достаточно ясным.
Спасибо!!!
1 ответ
Так вы можете сделать запрос на адрес. Объект ответа присваивается переменной. Тогда вы можете извлечь из него все, что захотите.
>>> 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, ...}