2016-08-31 1 views
0

Ich versuche, einen Strom von einer Kamera mit Elixir/HTTPoison zu bekommen und es in eine Datei zu speichern. ? URL ist xxxx/axis-cgi/mjpg/video.cgi Dauer = 1 & Auflösung = 320x240Wie bekomme ich einen Video-Stream mit Elixir/HTTPoison oder Hackney?

über die URL in DHC (Chrome Add-on), kann ich folgende Voraussetzungen erfüllt sein:

Antwort 200 OK

HEADERS Cache-Control: no-cache Pragma: no-cache Gültig bis: Do., 1. Dezember 1994 16.00.00 GMT Anschluss: schließen Content-Type: multipart/x-mixed-replace; Grenze = MyBoundary X-Time-Offset: 62044.312573 ziemlich COMPLETE Request HEADERS Akzeptieren: / Accept-Encoding: gzip, deflate, sdch Akzeptieren-Sprache: fr-FR, fr; q = 0,8, de-US; q = 0.6, en; q = 0.4 Inhalt-Typ: application/xml Benutzer-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/52.0.2743.116 Safari/537.36 Hinweis: XHR fügt automatisch Header wie Accept, Accept-Language, Cookie, User-Agent usw.

Raw Formatierung der Körper mir eine Menge von binären JPEG-Bild von einem --myboundary Sache getrennt zeigt.

--myboundary

Content-Type: image/jpeg

Content-Length: 11848

JFIF Wu] 7Wu] 7 2TY "C

Nun, ich will versuchen t zu erhalten er gleiche Sache mit Elixir.

test "request headers from cam" do 
    options = [hackney: [basic_auth: {"login","password"}]] 
    {:ok, %HTTPoison.AsyncResponse{id: id}} = HTTPoison.get "http://x.x.x.x/axis-cgi/mjpg/video.cgi?duration=1&resolution=320x240",[], [stream_to: self, recv_timeout: :infinity, hackney: options] 
    assert_receive %HTTPoison.AsyncStatus{id: ^id, code: 200}, 1_000 
    end 

ich die folgende Antwort zu tun haben,

1) test request headers from cam (NewsequenceTest) 
    test/newsequence_test.exs:9 
    No message matching %HTTPoison.AsyncStatus{id: ^id, code: 200} after 1000ms. 
    The following variables were pinned: 
     id = #Reference<0.0.3.125> 
    Process mailbox: 
     %HTTPoison.AsyncStatus{code: 401, id: #Reference<0.0.3.125>} 
     %HTTPoison.AsyncHeaders{headers: [{"Date", "Wed, 31 Aug 2016 06:47:00 GMT"}, {"Accept-Ranges", "bytes"}, {"Connection", "close"}, {"WWW-Authenticate", "Digest realm=\"AXIS_ACCC8E545922\", nonce=\"0000fa64Y50235919055a42f91d3dea744b10d2dab9653\", stale=FALSE, qop=\"auth\""}, {"WWW-Authenticate", "Basic realm=\"AXIS_ACCC8E545922\""}, {"Content-Length", "189"}, {"Content-Type", "text/html; charset=ISO-8859-1"}], id: #Reference<0.0.3.125>} 
     %HTTPoison.AsyncChunk{chunk: "<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>\n<BODY><H1>401 Unauthorized</H1>\nYour client does not have permission to get URL /axis-cgi/mjpg/video.cgi from this server.\n</BODY></HTML>\n", id: #Reference<0.0.3.125>} 
     %HTTPoison.AsyncEnd{id: #Reference<0.0.3.125>} 
    stacktrace: 
     test/newsequence_test.exs:12: (test) 

Ich habe versucht, ohne grundlegende auth mit dem gleichen Ergebnis.

Ich verstehe noch nicht, was passiert mit diesem Auth-Fehler. Sicher ich misunderstod etwas, kann jemand bitte mich zu diesem Thema aufklären?

Mit freundlichen Grüßen

Pierre

+0

Versuchen mit 'Optionen = [Basic_Auth: { "Login", "Passwort"}]'. – Dogbert

+0

Perfekt! Danke Dogbert! Gibt es einen Hinweis, wie man vorgeht, um alle Chunks richtig in eine Datei zu bekommen? – Tanc

+1

Nur für den Fall, ich habe Folgendes gefunden, um die Datei zu erhalten. Danke nochmal Dogbert. https://gitlab.amherst.edu/search?utf8=%E2%9C%93&search=stream_to_file&group_id=&project_id=27&search_code=true&repository_ref=master – Tanc

Antwort

1

So hier das Problem war, dass der Code rief:

HTTPoison.get(..., [], [..., hackney: [hackney: [basic_auth: {"login","password"}]]]) 

statt:

HTTPoison.get(..., [], [..., hackney: [basic_auth: {"login","password"}]]) 

die hackney verursacht wurde, zu ignorieren sie, wie es versuchte, opts[:hackney][:basic_auth] usw. Wh zu holen Ich war alle nil.

Das Update ist zu ersetzen:

options = [hackney: [basic_auth: {"login","password"}]] 

mit

options = [basic_auth: {"login","password"}] 
Verwandte Themen