При обнаружении типа запроса HTTP (ДОБИРАЮТСЯ, НАПРАВЛЯЙТЕСЬ, и т.д.) из Python cgi

В C#/.NET 3.5 Вы могли записать немного программы, чтобы сделать:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    string controller = context.ConnectedServer;
    Console.WriteLine( "Domain Controller:" + controller );
} 

Это перечислит всех пользователей в текущем домене:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    using (UserPrincipal searchPrincipal = new UserPrincipal(context))
    {
       using (PrincipalSearcher searcher = new PrincipalSearcher(searchPrincipal))
       {
           foreach (UserPrincipal principal in searcher.FindAll())
           {
               Console.WriteLine( principal.SamAccountName);
           }
       }
    }
}
11
задан cfischer 13 September 2009 в 13:12
поделиться

3 ответа

import os

if os.environ['REQUEST_METHOD'] == 'GET':
    # blah
17
ответ дан 3 December 2019 в 06:46
поделиться

Это не прямой ответ на ваш вопрос. Но ваш вопрос проистекает из того, что вы делаете что-то неправильно.

Не пишите скрипты Python CGI.

Напишите приложение mod_wsgi . Еще лучше использовать веб-фреймворк Python. Их десятки. Выберите один, например Werkzeug .

Стандарт WSGI (описанный в PEP 333 ) значительно упрощает поиск информации в веб-запросе.

Реализация mod_wsgi быстрее и безопаснее, чем CGI.

Веб-фреймворк также проще, чем написание собственного сценария CGI или приложения mod_wsgi.

использовать веб-фреймворк Python. Их десятки. Выберите один, например Werkzeug .

Стандарт WSGI (описанный в PEP 333 ) значительно упрощает поиск информации в веб-запросе.

Реализация mod_wsgi быстрее и безопаснее, чем CGI.

Веб-фреймворк также проще, чем написание собственного сценария CGI или приложения mod_wsgi.

использовать веб-фреймворк Python. Их десятки. Выберите один, например Werkzeug .

Стандарт WSGI (описанный в PEP 333 ) значительно упрощает поиск информации в веб-запросе.

Реализация mod_wsgi быстрее и безопаснее, чем CGI.

Веб-фреймворк также проще, чем написание собственного сценария CGI или приложения mod_wsgi.

1
ответ дан 3 December 2019 в 06:46
поделиться

Почему вам нужно различать GET и HEAD?

Обычно вы не должны различать и должны обрабатывать запрос HEAD так же, как GET. Это потому, что запрос HEAD должен возвращать те же заголовки, что и GET. Единственная разница в том, что ответа не будет. Тот факт, что нет содержимого ответа, не означает, что вам больше не нужно возвращать действительный заголовок Content-Length или другие заголовки, которые зависят от содержимого ответа.

В mod_wsgi, на который вам указывают разные люди. , он фактически намеренно изменит метод запроса с HEAD на GET в некоторых случаях, чтобы защититься от людей, которые неправильно обращаются с HEAD по-разному. Конкретный случай, когда это делается, - это регистрация выходного фильтра Apache. Причина, по которой это делается в этом случае, заключается в том, что выходной фильтр может ожидать увидеть содержимое ответа и на основании этого сгенерировать дополнительные заголовки ответа. Если бы вы решили не создавать какое-либо содержимое ответа для запроса HEAD, вы лишите выходной фильтр содержимого, и добавленные ими заголовки могут не соответствовать тому, что будет возвращено из запроса GET. Конечным результатом этого является то, что вы можете заполнить кеши и работу браузера.

То же самое может применяться в равной степени и для сценариев CGI позади Apache, поскольку в этом случае все еще могут быть добавлены выходные фильтры. Для сценариев CGI нет ничего, что могло бы защитить пользователей от глупых действий и других действий для запроса HEAD.

0
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: