首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收HTTP请求并触发操作的最简单方法是什么?

接收HTTP请求并触发操作的最简单方法是什么?
EN

Stack Overflow用户
提问于 2014-12-05 17:31:17
回答 2查看 4.7K关注 0票数 3

我有一个Raspberry Pi,我使用它作为DLNA,CIFS,VPN等的多用途24/7设备。现在我买了一个TellStick,它是一个可以向无线电源开关、调光器发送433 The无线命令的USB设备。制造商为linux提供了资源和工具,这是非常棒的,顺便说一句。

使用一个特殊的命令(名为tdtool),我可以向我的电源开关发送命令。

代码语言:javascript
复制
tdtool --on 1

这将打开设备1。这非常好,稳定,所以我想摆脱shell命令,以使处理更容易。我的想法是建立一个非常简单的web服务器,它只需要能够接收GET或POST请求,并触发一些操作,比如运行命令"tdtool 3“。因此,web服务器甚至不需要服务页面,它只需要侦听请求。

我想要创建一个基于HTTP的解决方案,因为这将允许我使用我的智能手机作为遥控器。有一个名为" Tasker“的Android应用程序本身就很棒,但是它也允许根据特定的条件发送定制的HTTP请求,这样当我回家时我就可以让我的灯亮起来(Tasker识别到我的WIFI网络或类似的连接)。

由于覆盆子不是最强大的硬件,我想保持尽可能简单的事情。基本上,我需要这个:

例如,会出现一个HTTP请求:

代码语言:javascript
复制
/switch?device=1&action=on

根据这一请求,服务器应该以某种方式将其转换为:

代码语言:javascript
复制
tdtool --on 1

我确信我会找到一种用Apache和PHP构建类似的东西的方法,但我认为这在我的例子中可能有点过火了。你有什么推荐的?有什么很酷的巨蟒魔法可以让这一切发生吗?或者是带有CGI脚本的漂亮的迷你网络服务器?任何想法和代码样本都是非常感谢的,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-12-05 17:35:53

虽然你的问题过于“意见相似”,但有一个几乎即时的解决办法:

nginx -如何在每个请求上运行shell脚本?

但是由于您是在讨论R-Pi,您可能会发现Python CGIHTTPServer (Python2)或http.server (Python3)模块更适合执行shell命令的任务。

票数 2
EN

Stack Overflow用户

发布于 2014-12-05 18:19:38

这里是一个完整的、工作的RealLife™perl示例

...using 舞女

代码语言:javascript
复制
# cpan Dancer
$ dancer -a MyApp
$ cd MyApp
$ cat ./lib/MyApp.pm # need to be edited, see bellow
$ bin/app.pl

现在您可以调用URL

代码语言:javascript
复制
http://127.0.0.1:3000/switch?device=1&action=on

现在将执行$cmd

./lib/MyApp.pm

代码语言:javascript
复制
package MyApp;
use Dancer ':syntax';

our $VERSION = '0.1';

get '/switch' => sub {
    my $var = params;
    my $device = $var->{device};
    my $action = "--" . $var->{action};
    # building custom system command
    my $cmd = "tdtool $action $device";
    # running the command
    `$cmd`;

    return "$cmd\nexecuted\n";
};

true;

这里还有一个完整的使用php的RealLife™示例

代码语言:javascript
复制
<?php

header("HTTP/1.1 200 OK");
if (isset($_REQUEST['action'], $_REQUEST['device'])) {
    $device = $_REQUEST['device'];
    $action = '--' . $_REQUEST['action'];
    $cmd = "tdtool $action $device";
    system("$cmd");
    echo "Command<br>$cmd<br>executed...";
}
?>

网址是:

代码语言:javascript
复制
http://127.0.0.1/switch.php?device=1&action=on

这需要端口80上的HTTP server绑定和DocumentRoot顶部的脚本switch.php (在本例中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27321523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档