HTTP Prompt* 严重依赖于httpie.core.main()
函数来发送实际的 HTTP 请求。 一些 HTTP Prompt 的功能,比如设置传入的 cookie,需要我们在 Python 中访问响应对象(更具体的requests.Response
),但是httpie.core.main()
不提供这样的 API。 因此,HTTP Prompt 使用sys.settrace()
来“破解” HTTPie 以获取httpie.core.get_response()
返回的响应对象,如下代码所示:
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
我想知道 HTTPie 是否可以为开发人员提供一个 API 来更轻松地访问内部响应对象。
* 对于那些还不知道的人:HTTP Prompt 是一个提供 HTTPie 交互界面的包装器。
是的,这是有道理的——我会研究这个。 main()
可以返回退出状态代码和最终的 HTTP 响应。 也许解析 args 对返回也很有用。
@eliangcs我正在做一个更大的重构,我认为有一个稳定的和记录在案的api.py
模块供第三方工具使用会很好,所以他们不必接触内部有随时间变化的趋势。
您能否根据http-prompt
当前从 HTTPie 导入的内容闪现一些内容? 带有 args 的空方法和一些带有返回值的简短文档字符串就足够了。 一个好的起点是列出http-prompt
需要的所有导入。
//抄送@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 很少涉及 HTTPie 的 API。 它仅限于:
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 很少涉及 HTTPie 的 API。 它仅限于:
所做工作的核心是将
requests.models.Request
传递给streams.build_output_stream
并调用streams.write_stream
。 所有这些都发生在https://github.com/mblayman/httpony/blob/master/httpony/application.py 中。