2015-07-01 13 views
10

próbuję przesłać ten formularz za pomocą HTTPoisonJak wyświetlić surowy prośbę HTTPoison

https://gist.github.com/shankardevy/6728d63eb528b3cb223a

z kodem poniżej:

HTTPoison.post!(url,{:multipart, [{"username", "user"}, {"password", "pass"}]}) 

Jednak uzyskany strona daje „Nieprawidłowy uwierzytelnienia ". Ale kiedy próbuję zalogować się przy użyciu tych samych poświadczeń przy użyciu przeglądarki, działa.

Tak więc zastanawiałem się, czy mogę zobaczyć surowe żądanie http przez HTTPoison, aby móc go porównać z surowym żądaniem przeglądarki.

Odpowiedz

9

Jeśli chcesz zobaczyć żądanie, a może chcesz uzyskać dostęp do http://httpbin.org? Powtarza on żądane informacje.

iex(1)> IO.puts HTTPoison.post!("http://httpbin.org/post",{:multipart, [{"username", "user"}, {"password", "pass"}]}).body 

HTTPoison wykorzystuje hackney jako backend i mam przykładowy plik, przesyłając za pomocą hackney w następujących (Choć to nieco różni się od przykładu, ja umieszczenie go w celach informacyjnych, jak wcześniej walczyła na znalezienie przykładów o wieloczęściowym).

https://github.com/parroty/excoveralls/blob/master/lib/excoveralls/poster.ex

Czy jest jakiś szczególny powód, aby korzystać z wieloczęściowy dla prostu wysyłając parametr użytkownik/hasło przy okazji?

+0

dzięki @parroty. Próbowałem zgodnie z twoją sugestią zarówno przy użyciu ': hackney' i' HTTPoison', ale odpowiedź mówi, że moje poświadczenia są błędne, podczas gdy działają dobrze z przeglądarką. Czekam więc na to, aby zobaczyć surowe żądanie HTTPoison, a nie sformatowaną przez json odpowiedź HTTPbin na debugowanie. w innej notatce nie mam kontroli nad zmianą formularza, dlatego musiałem użyć żądania "wieloczęściowego", ponieważ tego oczekuje serwer zdalny. – shankardevy

+1

Niestety nie znam odpowiedzi na część z surowym żądaniem, ale jeśli chcesz porównać ją z przeglądarką, łatwiej będzie napisać prosty lokalny serwer, aby odbierać żądania z obu stron, zamiast analizować surowe żądanie (np. przechwytywanie pakietów itp.). Na wszelki wypadek, jeśli podano również parametr "uri" w formularzu? – parroty

+0

dzięki. posiadanie lokalnego serwera to dobry pomysł. – shankardevy

2

Możesz użyć niesamowitego narzędzia ngrok do utworzenia serwera proxy dla żądań, np.

$ ngrok example.com 8080

będzie wypluć URL jak http://abcd1234.ngrok.com że prokurenci żadnych żądań wysyłanych do niego do example.com portu 8080. Następnie można skontrolować surowe wnioski w monitorowaniu internetowej UI ngrok za co http://localhost:4040. Nie trzeba dodawać, że będziesz wysyłać wszystkie dane do strony trzeciej, więc nie przesyłaj nazw użytkowników i haseł, których nie chcesz ujawniać.