Ошибка HTTP POST 414 - PullRequest
       27

Ошибка HTTP POST 414

0 голосов
/ 12 ноября 2009

Я использую HTTP POST для вызова сценария cgi на веб-сервере и отправки некоторых данных в качестве аргументов. Некоторые из аргументов могут содержать довольно много данных. Кажется, это проблема для веб-сервера, и в результате я получаю ошибку 414 (слишком длинный запрос URI).

Мой URI выглядит примерно так: http://somewebsite.com/cgi-bin/dosomething.py?function=doitnow&data=this много данных и сервер будет жаловаться ...

Есть ли другой способ вызвать скрипт cgi на веб-сервере и передать ему длинную строку?

Спасибо.

Ответы [ 4 ]

1 голос
/ 12 ноября 2009

Есть несколько способов сделать это, полагаясь на тот факт, что у вас есть доступ к 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"
1 голос
/ 12 ноября 2009

Вы не отправляете свой запрос как POST, если данные попадают в URL. С POST запрос выглядит так (неполно):

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

data=Hello

Но URL все равно будет выглядеть как http://somewebsite.com/cgi-bin/dosomething.py.

Как выглядит источник вашего запроса? HTML, то есть, или как вы его составляете.

0 голосов
/ 12 ноября 2009

Вы уверены, что используете 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>

0 голосов
/ 12 ноября 2009

Вам нужно сделать POST-запрос вместо GET-запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...