服务器端包含 (ssi) 在 IIS 服务器上,读取 POST 请求数据失败
Server side includes (ssi) on IIS server, read POST request data fails
我的目标是我的 SSI (shtml) 将解析 POST 数据参数和 return 一个基于这些参数的长加密字符串。
我正在使用 IIS 作为服务器。
我的约束:
- 我无法更改 url - /document.shtml
- shtml 只需要 return base 64 字符串结果。
我尝试了什么:
- 在 shtml 中使用 "exec cgi",这样:
document.shtml:
<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
test.py(简化版,没有背后的加密逻辑):
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"
这里的问题是,如果我向 .../test.py 发送 post 请求,那么它就可以工作,
但是如果我将请求发送到 document.shtml,内容长度仍将如环境变量所描述的那样为正数,但标准输入会出错。
- 我的另一个想法是读取 POST 数据,以某种方式从 shtml 本身并将其传递给 cgi,这样:
<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
问题是,我查看了网络,但没有找到从 shtml 实现的方法。
有什么建议吗?我错过了一些简单的东西吗?
我还没有找到使用 SSI 指令的方法,我确实知道标准输入没有从主脚本传递到 cgi。
所以我找到了其他解决方案,仍然可以解决我的限制。
在 SHTML 的 IIS 处理程序映射中,我将可执行文件配置为 php。
我自己在 shtml 中写了一个 php 代码(这里只显示打印 json 字符串的示例):
<?php var_dump($HTTP_RAW_POST_DATA); ?>
我的目标是我的 SSI (shtml) 将解析 POST 数据参数和 return 一个基于这些参数的长加密字符串。 我正在使用 IIS 作为服务器。
我的约束:
- 我无法更改 url - /document.shtml
- shtml 只需要 return base 64 字符串结果。
我尝试了什么:
- 在 shtml 中使用 "exec cgi",这样:
document.shtml:
<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
test.py(简化版,没有背后的加密逻辑):
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"
这里的问题是,如果我向 .../test.py 发送 post 请求,那么它就可以工作, 但是如果我将请求发送到 document.shtml,内容长度仍将如环境变量所描述的那样为正数,但标准输入会出错。
- 我的另一个想法是读取 POST 数据,以某种方式从 shtml 本身并将其传递给 cgi,这样:
<!--#exec cgi="/pythonApp/test.py?sdfsdf=sdfsdf" -->
问题是,我查看了网络,但没有找到从 shtml 实现的方法。
有什么建议吗?我错过了一些简单的东西吗?
我还没有找到使用 SSI 指令的方法,我确实知道标准输入没有从主脚本传递到 cgi。
所以我找到了其他解决方案,仍然可以解决我的限制。
在 SHTML 的 IIS 处理程序映射中,我将可执行文件配置为 php。
我自己在 shtml 中写了一个 php 代码(这里只显示打印 json 字符串的示例):
<?php var_dump($HTTP_RAW_POST_DATA); ?>