HTTP Prompt * в значительной степени полагается на функцию httpie.core.main()
для отправки фактических HTTP-запросов. Некоторые функции HTTP Prompt, такие как установка входящих файлов cookie, требуют от нас доступа к объекту ответа (точнее, requests.Response
) в Python, но httpie.core.main()
не предоставляет такого API. Таким образом, HTTP Prompt "взламывает" HTTPie с помощью sys.settrace()
чтобы получить объект ответа, возвращенный httpie.core.get_response()
, как показано в следующем коде:
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
Интересно, может ли HTTPie предложить разработчикам API для более простого доступа к внутреннему объекту ответа.
* Для тех, кто еще не знал: HTTP Prompt - это оболочка, которая предоставляет интерактивный интерфейс HTTPie.
Да, это имеет смысл - я разберусь с этим. main()
может возвращать как код статуса выхода, так и окончательный HTTP-ответ. И, возможно, также будет полезно вернуть аргументы синтаксического анализа.
@eliangcs Я занимаюсь большим рефакторингом и думаю, было бы хорошо иметь стабильный и документированный модуль api.py
для использования сторонними инструментами, чтобы им не приходилось трогать внутренние компоненты, которые имеют тенденцию меняться со временем.
Не могли бы вы высветить что-нибудь на основе того, что http-prompt
настоящее время импортирует из HTTPie? Достаточно пустых методов с аргументами и коротких строк документации с возвращаемыми значениями. Хорошей отправной точкой было бы просто перечисление всего импорта, необходимого для http-prompt
.
// cc @mblayman
@jkbrzt Я провел grep над своей кодовой базой. Вот что я нашел:
# http_prompt/cli.py
from httpie.plugins import FormatterPlugin # just to avoid cyclic import, not really used
from httpie.output.formatters.colors import Solarized256Style # to support solarized theme
# http_prompt/execution.py
from httpie.context import Environment # to construct a custom Environment and pass it to httpie_main
from httpie.core import main as httpie_main # to generate output and the response object
HTTPony очень мало затрагивает API HTTPie. Это ограничено:
from httpie.cli import parser
from httpie.context import Environment
from httpie.output import streams
Суть того, что делается, - это передача requests.models.Request
в streams.build_output_stream
и вызов streams.write_stream
. Все это происходит в https://github.com/mblayman/httpony/blob/master/httpony/application.py.
Большое спасибо. Я пройдусь через это и формализую те вещи, где это имеет смысл. Затем создайте несколько оберток в httpie.api
- или просто сделайте эти объекты импортируемыми из модуля для начала.
Это сделает его явным, что пользователи могут / могут зависеть от него, и обеспечит некоторую гарантию стабильности по сравнению с внутренними компонентами. Изменения в экспортируемой функциональности httpie.api
также должны быть отражены в журнале изменений.
Самый полезный комментарий
HTTPony очень мало затрагивает API HTTPie. Это ограничено:
Суть того, что делается, - это передача
requests.models.Request
вstreams.build_output_stream
и вызовstreams.write_stream
. Все это происходит в https://github.com/mblayman/httpony/blob/master/httpony/application.py.