服务器端包含(ssi)在IIS服务器上,读取POST请求数据失败

时间:2015-09-26 17:15:51

标签: python iis post cgi ssi

我的目标是我的SSI(shtml)将解析POST数据参数并返回一个长加密字符串,该字符串将基于这些参数。 我使用IIS作为服务器。

我的约束:

  1. 我无法更改网址 - /document.shtml
  2. shtml只需返回base 64字符串结果。
  3. 我尝试了什么:

    1. 使用" exec cgi"在shtml中,这样:
    2. document.shtml:

      
      
      <!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
      &#13;
      &#13;
      &#13;

      test.py(简化版,没有加密逻辑):

      &#13;
      &#13;
      import cgitb
      cgitb.enable()
      import base64,urllib,json,os,sys
      import cgi
      
      print "Content-Type: text/plain;charset=utf-8"
      print
      
      cl, _ = cgi.parse_header(os.environ['CONTENT_LENGTH'])
      if (int(cl)>0):
      	data = sys.stdin.read(int(cl))
      	input_j = json.loads(data)
      
      	print "AB : ",input_j["AB"] 
      else:
      	print "Failed to read POST request"
      &#13;
      &#13;
      &#13;

      这里的问题是,如果我发送邮件请求到... / test.py,那么它可以工作, 但是如果我将请求发送到document.shtml,则内容长度仍为正值,如环境变量所述,但是stdin将出错。

      1. 我的另一个想法是以某种方式从shtml本身读取POST数据并将其传递给cgi,这样:
      2. &#13;
        &#13;
        <!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
        &#13;
        &#13;
        &#13;

        问题在于,我查看了网络,并没有找到一种方法从shtml中做到这一点。

        有什么建议吗?我错过了一些简单的东西吗?

1 个答案:

答案 0 :(得分:0)

我还没有找到使用SSI指令来做它,我确实理解stdin没有从主脚本传递给cgi。

所以我发现其他解决方案仍能解决我的问题。

在SHTML的IIS处理程序映射中,我将可执行文件配置为php。

并在shtml中我自己写了一个PHP代码(这里只显示打印json字符串的示例):

<?php var_dump($HTTP_RAW_POST_DATA); ?>