我正在使用HTTP POST在Web服务器上调用cgi脚本并将一些数据作为参数发送。一些参数可以包含相当多的数据。这似乎是Web服务器的问题,因此我收到错误414(请求URI太长)。
我的URI最终看起来像这样: http://somewebsite.com/cgi-bin/dosomething.py?function=doitnow&data=this是很多数据,服务器会抱怨...
我是否有不同的方法在Web服务器上调用cgi脚本并将其传递给长字符串?
感谢。
答案 0 :(得分:1)
如果数据以URL结尾,则您不会将请求作为POST发送。使用POST,请求看起来像这样(不完整):
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
data=Hello
但网址仍然是http://somewebsite.com/cgi-bin/dosomething.py
。
您的请求来源是什么样的? HTML,即,或者你把它放在一起。
答案 1 :(得分:1)
有几种方法可以做到这一点,依赖于您可以访问接收请求的CGI这一事实。
最好的选择是将data
作为POST
而不是GET
发送。如果由于某种原因无法执行此操作,则可以尝试通过某种压缩方式发送数据并在CGI中对其进行解压缩。
如果两台服务器之间发生通信,第一台服务器可以将data
保存到文件中,并将文件名发送到第二台服务器,这样CGI就会检索这个文件,而不是从URL中读取数据。
您可以调整CGI以将数据接收到块中,拆分数据并使用其他变量标记每个请求,例如function=doitnow&data=bytes&chunk=1&total=2&id=somekey
,function=doitnow&data=more-data&chunk=2&total=2&id=somekey
由于我并没有真正使用Python太多,我不知道如何处理POST或GET值,只是在这种情况下,下面是一个将POST和GET值传递给php脚本的包装器:
#!/bin/sh
echo "Content-Type: text/html;"
echo
echo
#POST=`dd count=$CONTENT_LENGTH bs=1 2> /dev/null`
POST=`dd bs=1 2> /dev/null`
php -f 'dosomething.php' -- "$POST" "$QUERY_STRING"
答案 2 :(得分:0)
您需要发出POST请求而不是GET请求。
答案 3 :(得分:0)
您确定要使用POST吗?看起来像是对我的GET请求。
<form method="post" action="....py">
<input type="hidden" name="function" value="doitnow">
<input type="hidden" name="data" value="data">
// dont forget the submit button
</form>