HTTP POST错误414

时间:2009-11-12 02:47:22

标签: http cgi

我正在使用HTTP POST在Web服务器上调用cgi脚本并将一些数据作为参数发送。一些参数可以包含相当多的数据。这似乎是Web服务器的问题,因此我收到错误414(请求URI太长)。

我的URI最终看起来像这样: http://somewebsite.com/cgi-bin/dosomething.py?function=doitnow&data=this是很多数据,服务器会抱怨...

我是否有不同的方法在Web服务器上调用cgi脚本并将其传递给长字符串?

感谢。

4 个答案:

答案 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=somekeyfunction=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>