从Mac服务器中的html运行CGI脚本

时间:2018-02-09 19:10:00

标签: macos webserver cgi

我在/Library/WebServer/Documents/ and cgi code in /Library/WebServer/Documents/cgi-bin/bot_stop.cgi

中有以下代码

Html代码:

<button style="height: 75px; width: 85px" onclick="bot_stop()">
    <img style="height: 63px"src="http://images.clipartpanda.com/stop-sign-clipart-119498958977780800stop_sign_right_font_mig_.svg.hi.png">
</button>

XMP代码:

function bot_stop()
{
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET","cgi-bin/bot_stop.cgi",true);
    xmlhttp.send();
    alert("I am an alert box!");
}

CGI代码:

#!/bin/bash

echo hello world

我怎么知道脚本运行了?我也收到了弹出窗口,但知道上面的功能有用。

1 个答案:

答案 0 :(得分:0)

你咬过的东西比你一下子咬的多。我会尽力帮助你完成第一部分。

对于故障排除,最好降低复杂性。您不必在浏览器中创建XHR,而是首先在命令行中发出HTTP请求,这是一件非常简单的事情。

安装curlHomebrew有最新版本。运行curl -v http://localhost/cgi-bin/bot_stop.cgi

如果您拒绝连接,则Web服务器未运行或者在不同于80的端口上运行。重新启动它或查看Web服务器配置配置的端口是什么。例如,如果它是8080,那么您需要改为运行curl -v http://localhost:8080/cgi-bin/bot_stop.cgi

如果您收到Not Found错误,或者&#34;系统找不到指定的文件&#34;,则说明Web服务器未正确配置为从该位置运行CGI程序。阅读Web服务器文档,了解如何更改配置以从/Library/WebServer/Documents/cgi-bin/位置运行CGI程序。

如果出现内部服务器错误,请查看Web服务器错误日志。如果它说&#34;不能执行:Permission denied&#34;,那么你需要在你的CGI程序上设置可执行文件属性。如果它说&#34;脚本标题的过早结束&#34;,则CGI程序能够运行,但没有返回足够正确的HTTP响应。由于您使用bash,您需要自己构建HTTP标头:

#!/bin/bash
echo Content-Type: text/plain
echo
echo hello world

使用Perl,CGI程序看起来很像:

#!/usr/bin/env plackup
use strict;
use warnings;
my $app = sub {
    return [
        200,
        ['Content-Type' => 'text/plain'],
        ['hello world'],
    ];
};

成功的卷曲响应看起来应该类似于:

< HTTP/1.1 200 OK
< Date: Tue, 13 Feb 2018 09:03:25 GMT
< Server: blahblahblahblah
< Content-Length: 12
< Content-Type: text/plain
<
hello world

现在您知道这有效,您可以使用浏览器地址栏中的URL,然后尝试通过按钮触发XHR。使用Developer工具/ Javascript控制台检查错误详细信息。