Python: запросить URL через POST и показать результат в браузере - PullRequest
5 голосов
/ 26 декабря 2011

Я разработчик для большого приложения с графическим интерфейсом, и у нас есть веб-сайт для отслеживания ошибок.Любой желающий может отправить новую ошибку на сайт отслеживания ошибок.Мы можем обнаружить определенные сбои в нашем настольном приложении (то есть необработанное исключение), и в таких случаях мы хотели бы открыть форму submit-new-bug в предопределенном пользователем браузере, добавив любую информацию, которую мы можем собрать о сбое, внекоторые поля формы .Мы можем либо получить форму submit-new-bug, используя методы GET или POST http, и мы можем предоставить значения полей по умолчанию для этой формы.Так что со стороны http-сервера все в порядке.

Пока что мы можем успешно открыть URL, передавая значения по умолчанию в виде параметров GET в URL, используя модуль webbrowser изСтандартная библиотека Python.Однако существуют некоторые ограничения этого метода , такие как максимально допустимая длина URL для некоторых браузеров ( особенно MS IE ).Модуль webbrowser, похоже, не имеет способа запросить URL с помощью POST.OTOH есть модуль urllib2 , который обеспечивает необходимый нам тип управления, но AFAIK у него нет возможности открыть полученную страницу в браузере, предпочитаемом пользователем.

Есть лиспособ получить это смешанное поведение, которое мы хотим (иметь точный контроль urllib2 с функциональностью более высокого уровня webbrowser)?

PS: мы подумали о возможности получения URL-адреса с помощью urllib2, сохранения его содержимого во временном файле и открытия этого файла с помощью webbrowser.Это немного неприятное решение, и в этом случае нам придется иметь дело с другими проблемами, такими как относительные URL-адреса.Есть ли лучшее решение?

Ответы [ 2 ]

5 голосов
/ 26 декабря 2011

Я не знаю, как вы можете открыть результат запроса POST в веб-браузере, не сохраняя результат в файле и не открывая его.

Как насчет альтернативного подхода и временного сохраненияданные на сервере.Затем страницу можно открыть в браузере с помощью простого параметра id, и будет показана сохраненная частично заполненная форма.

2 голосов
/ 26 декабря 2011

Вы можете использовать tempfile.NamedTemporaryFile():

import tempfile
import webbrowser
import jinja2

t = jinja2.Template('hello {{ name }}!') # you could load template from a file
f = tempfile.NamedTemporaryFile() # deleted when goes out of scope (closed)
f.write(t.render(name='abc'))
f.flush()
webbrowser.open_new_tab(f.name) # returns immediately 

Лучший подход, если сервер можно легко модифицировать, - сделать запрос POST с частичными параметрами, используя urllib2, и открыть URL-адрес, сгенерированный сервером, используя webbrowser как , предложенный @ Acorn .

...