Je suis au courant de l'existence des bibliothèques qui renvoient des réponses HTTP comme struct
s:retour ipv4 GET repsonse binaire brut en élixir
> HTTPoison.get!("http://httpbin.org/get")
> %HTTPoison.Response{body: "{\n \"args\": {}, \n \"headers\": {\n \"Host\": \"httpbin.org\", \n \"User-Agent\": \"hackney/1.6.6\"\n }, \n \"origin\": \"86.30.176.31\", \n \"url\": \"http://httpbin.org/get\"\n}\n", headers: [{"Server", "nginx"}, {"Date", "Sun, 12 Mar 2017 06:05:29 GMT"},{"Content-Type", "application/json"}, {"Content-Length", "165"}, {"Connection", "keep-alive"}, {"Access-Control-Allow-Origin", "*"}, {"Access-Control-Allow-Credentials", "true"}], status_code: 200}
Mais comment puis-je obtenir la forme binary
brute d'un paquet de réponse HTTP ipv4 en élixir?
Selon la suggestion de Dogbert, j'ai essayé d'utiliser gen_tcp
, mais on m'a donné les éléments suivants:
iex(1)> {:ok, port} = :gen_tcp.connect('httpbin.org',80,[:binary, active:
false, packet: :http])
{:ok, #Port<0.6531>}
iex(2)> :gen_tcp.send(port, "GET /get HTTP/1.1\r\nHost: httpbin.org\r\n")
:ok
iex(3)> :gen_tcp.recv(port,0)
{:error, :closed}
ce que je fais mal ici?
Si la demande est un simple GET, vous pouvez utiliser 'gen_tcp' directement. Si c'est plus complexe, je crois que ['hackney'] (https://github.com/benoitc/hackney) doit avoir une option pour obtenir la réponse brute mais je n'arrive pas à la trouver. – Dogbert
Si c'est juste pour déboguer, peut-être que [Wireshark] (https://www.wireshark.org/) serait une bonne option pour vous? –
@PatrickOscity - essayé, mais je cherche quelque chose que je peux reproduire dans Elixir. – category