Данные формы недоступны в скрипте Python

Рассмотрим следующий сценарий test.py на сервере Apache:

#!/usr/bin/env python

import cgi

cgi.test()

Если я позвоню http://domain.local/test.py?foo=bar, на выходе будет сказано (среди прочего):

QUERY_STRING
REQUEST_METHOD
    GET

Command Line Arguments
[]

Form Contents:
No form fields.

Если я отправлю данные с помощью запроса POST, QUERY_STRING и REQUEST_METHOD вообще не появятся, не говоря уже о том, что раздел содержимого формы все еще пуст.

Почему это происходит и как я могу это решить?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
35
1

Ответы 1

Я решил проблему с помощью обходного пути:

import urlparse
import sys

print "Content-Type: text/plain;charset=utf-8"
print

data=dict(urlparse.parse_qsl(sys.stdin.read()))

for field in data:
   print field,data[field]

В моем конкретном случае сценарий будет принимать только данные POST (я бы использовал $ _POST в PHP, отказавшись от $ _GET). Его можно легко изменить, чтобы иметь возможность анализировать данные GET, будь то вместо или в дополнение к POST.

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

Другие вопросы по теме