【问题标题】:Extract data from Get requests in python从python中的Get请求中提取数据
【发布时间】:2016-11-27 11:37:20
【问题描述】:

我在树莓派中有一个 SimpleHTTPServer,它使用一个 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()

加载网页后,它开始发送不同的 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 错误,它的出现是因为 web 有不同的图标,我还没有放在目录中,因为我正在做测试。

之所以要这样做,是因为我正在“翻译”一个网络服务器来控制我在 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);
                    }

总结一下,我想在我的 python 脚本中将 get 请求作为字符串读取并从中提取数据,然后使用 XML 进行响应,但我认为这最后一步将在互联网上得到更好的解释,所以我不担心它。

我希望我的解释足够清楚。

谢谢!!!

【问题讨论】:

  • 您是否尝试解析网络服务器日志消息?
  • 这是一个选项。

标签: python get simplehttpserver


【解决方案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, ...}

【讨论】:

  • 感谢您的回答,但必须有更好的方法来做到这一点。有没有办法直接读取get请求,而不仅仅是读取日志?
  • 实际上我无法完全理解您要做什么。您可以使用 python 中的 requests 模块发出请求并读取数据。你能告诉我你在找什么吗?
  • Simplehttpserver 在端口 8080 上提供网络服务。我介绍了树莓地址和端口,以便从我的浏览器远程访问网络。加载网络后,它会从我的浏览器向树莓服务器发出获取请求,以从温度传感器(例如)检索数据,然后我的 python 脚本需要识别获取请求并以 XML 格式发回数据。你现在明白了么?感谢您的帮助。
  • 这就像树莓派(服务器)上的 python 脚本和使用 simplehttpserver(客户端)在远程 Web 浏览器上加载的 Web 之间的通信一样简单,并使用 get 请求询问服务器和 XML将数据发送回网络的包。
  • 嗯,你混淆了许多我仍然不清楚的术语。但我得到一个线索,您正在尝试在服务器端解析获取参数。阅读:stackoverflow.com/questions/8928730/…
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2019-10-15
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多