2016-11-27 296 views
0

我在一个使用与index.html网页相同的目录中执行的python脚本的树莓派中获得了SimpleHTTPServer。代码如下:从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请求,我需要用我的python脚本来读取,但我不知道该怎么做。

这是获取请求的示例;

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数据包或响应阀门。

在arduino上,将“获取”请求作为字符串“捕获”的代码如下:

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请求在我的Python脚本中的字符串,并从中提取数据,然后响应与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上提供Web服务。我介绍树莓地址和端口以从我的浏览器远程访问Web。一旦加载网页,它就会从我的浏览器获取请求到树莓服务器以从温度传感器(例如)中检索数据,然后我的python脚本需要识别获取请求并以XML格式发回数据。你现在明白了么?谢谢你的帮助。 – gcp900