HTTP Prompt* stützt sich stark auf die Funktion httpie.core.main()
, um tatsächliche HTTP-Anfragen zu senden. Einige Funktionen der HTTP-Eingabeaufforderung, wie das Setzen von eingehenden Cookies, erfordern den Zugriff auf das Antwortobjekt ( requests.Response
, um genauer zu sein) in Python, aber httpie.core.main()
bietet keine solche API. So "hackt" HTTP Prompt HTTPie mit sys.settrace()
, um das von httpie.core.get_response()
Antwortobjekt zu erhalten, wie der folgende Code zeigt:
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
Ich frage mich, ob HTTPie Entwicklern eine API bieten könnte, um einfacher auf das interne Antwortobjekt zuzugreifen.
* Für diejenigen, die es noch nicht wissen: HTTP Prompt ist ein Wrapper, der eine interaktive Schnittstelle von HTTPie bereitstellt.
Ja, es macht Sinn – ich werde das prüfen. main()
könnte sowohl den Exit-Statuscode als auch die endgültige HTTP-Antwort zurückgeben. Und vielleicht wäre es auch nützlich, die Parse-Argumente zurückzugeben.
@eliangcs Ich mache ein größeres Refactoring und denke, es wäre gut, ein stabiles und dokumentiertes api.py
Modul für die Verwendung durch Tools von Drittanbietern zu haben, damit sie die Interna nicht berühren müssen, die haben die Tendenz, sich im Laufe der Zeit zu verändern.
Könnten Sie vielleicht etwas basierend auf dem, was http-prompt
derzeit aus HTTPie importiert, herausflashen? Leere Methoden mit Argumenten und einige kurze Docstrings mit Rückgabewerten würden ausreichen. Ein guter Ausgangspunkt wäre, einfach alle Importe aufzulisten, die http-prompt
benötigt.
// cc @mlayman
@jkbrzt Ich habe über meine Codebasis grep gemacht. Das habe ich gefunden:
# 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 berührt sehr wenig von den APIs von HTTPie. Es ist beschränkt auf:
from httpie.cli import parser
from httpie.context import Environment
from httpie.output import streams
Der Kern dessen, was getan wird, besteht darin, ein requests.models.Request
an streams.build_output_stream
und streams.write_stream
aufzurufen. All dies geschieht in https://github.com/mblayman/httpony/blob/master/httpony/application.py.
Vielen Dank. Ich werde es durchgehen und die Dinge formalisieren, wo es Sinn macht. Dann erstellen Sie einige Wrapper in httpie.api
– oder machen Sie diese Objekte einfach aus dem Modul importierbar.
Dies macht es explizit, dass Benutzer sich darauf verlassen können/könnten und bietet eine gewisse Stabilitätsgarantie im Vergleich zu den Interna. Änderungen an der httpie.api
-exportierten Funktionalität sollten auch im Änderungsprotokoll behandelt werden.
Hilfreichster Kommentar
HTTPony berührt sehr wenig von den APIs von HTTPie. Es ist beschränkt auf:
Der Kern dessen, was getan wird, besteht darin, ein
requests.models.Request
anstreams.build_output_stream
undstreams.write_stream
aufzurufen. All dies geschieht in https://github.com/mblayman/httpony/blob/master/httpony/application.py.