HTTP POST, curl и mod_python - Как обработать запрос POST без элемента HTML FORM? - PullRequest
1 голос
/ 06 декабря 2010

Я использую сервер mod_python, где index.py предназначен для обработки входящих запросов.

В index.py, если я спроектирую что-то подобное для обработки формы и получения подробностей вform:

<form enctype="multipart/form-data" action="func" method="post">
<p>Input file:<input type="file" name="request"></p>
<p><input type="submit" name="press" value="submit"></p>

И получите подробности из формы, подобной этой (обратите внимание на действие «func» выше)

def func(req):
    message = []
    f = req.form.getfirst('request')

Он отлично работает в браузере.Я могу загрузить файл, а его содержимое можно получить на стороне сервера.

Однако я хочу отправить данные через POST curl.В этом случае, я думал, элемент на сервере не требуется для обработки POST, если я могу получить данные POST от самого объекта запроса.

Предположим, мой запрос через curl выглядит следующим образом:

curl --data "request=data_i_am_posting" http://mymodpythonsite.com/path/

Как должен быть разработан мой обработчик запросов mod_python, чтобы я получал данные, которые я публикую.Должен ли я использовать на всех?

def index(req):
    # What should I do here to get data_i_am_posting

Кстати, обратите внимание, что браузер вообще не будет обращаться к моему HTTP-серверу, клиенты (curl, сценарии) будут публиковать данные и ждать ответа, который не будет HTML.

1 Ответ

4 голосов
/ 06 декабря 2010

Первые несколько заметок:

  • Похоже, вы используете Обработчик издателя mod_python . Это многое делает под прикрытием для отображения URL-адресов на функции Python.
  • Сервер на самом деле не знает и не заботится, откуда он получает свои данные. В вашем случае команда curl просто имитирует запрос POST формы .
  • Поэтому вы можете обрабатывать запросы curl точно так же, как запросы формы.
  • Вы, вероятно, не хотите называть свою функцию "index", потому что это может добавить ненужную путаницу к отображению path-> function издателя, поскольку "index.py" является подразумеваемой частью пути. Не ошибаюсь, просто сбиваю с толку.

Так что для вашей команды curl вы сможете получить то, что вы хотите, из этой функции в модуле "index.py":

def path(req):
    request_data = req.form.getfirst('request')
...