Posts Tagged ‘curl’

Freitag, 6. November 2020

Trump oder Biden? Gezählte Stimmen im Live-Stream (für Geeks)

Genial: alex/nyt-2020-election-scraper

Web GUI (inkl. Notifications)

alex.github.io/nyt-2020-election-scraper/battleground-state-changes.html

Kommandozeile

Jemand auf der Arbeit hat sich ein Kommandozeilentool gebaut, welches ihm die Veränderungen in Arizona auflistet. Ich gehe davon aus, dass er diese Text-Datei alle paar Minuten abruft, parst, und dann das neueste Resultat ausgibt: battleground-state-changes.txt

Ich habe es auch versucht, und glaub‘ ich hingekriegt:

$ watch -n 60 ./potus-2020-vote-stream.sh

watch ruft das untenstehende Script alle 60 Sekunden auf.

potus-2020-vote-stream.sh enthält folgenden Code:

#!/bin/bash

URL="https://raw.githubusercontent.com/alex/nyt-2020-election-scraper/master/battleground-state-changes.txt"
STATE="Arizona"

CMD="curl --silent \"$URL\" | grep -A 2 \"$STATE\" | tail -n 1"
#echo $CMD
eval $CMD

exit 0

Tags: , , , , , , , , ,
Labels: USA

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 29. April 2015

Sequentiell nummerierte Web-Dateien automatisiert herunterladen

Vor ungefähr einem Jahr stiess ich bei der Suche nach möglichen Hochzeitslokalitäten im Silicon Valley auf das Historic Del Monte in Sunnyvale CA, USA.

Um mir eine realistische Vorstellung der Lokalität zu machen, begab ich mich anschliessend auf die Suche nach im Netz publizierten Hochzeitsfotos – und wurde bei Bella Pictures fündig.

Um die Bilder der Lokalität in aller Ruhe auf dem Plasma-Fernseher zu Hause zu Gemüte zu führen, wollte ich diese herunterladen und lokal speichern. Die Chrome-Extension, welche ich normalerweise für solche Tätigkeiten verwende, funktionierte bei dieser spezifischen Web-Site mit Flash-Galerie aber nicht.

Ich musste deshalb auf cURL ausweichen. Glücklicherweise waren die Photos sequentiell nummeriert:

$ curl "http://s3.amazonaws.com/AWG-Media/Bella_Assets/venueMontage/slideshows/thehistoricdelmonte/images/[00-50].jpg" -o "#1.jpg"

Mit diesem Befehl versucht cURL, Dateien in der Form 00.jpg, 01.jpg bis und mit 50.jpg herunterzuladen. Falls dies klappt, wird die Datei als 00.jpg, 01.jpg bis und mit 50.jpg in das Dateisystem geschrieben (-o steht für Output File, #1 ist der Platzhalter für die in [00-50] generierten sequentiellen Zahlen.)

Tags:
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 21. Januar 2015

Wieder einmal: Unrealistisch grossen FLV-Video-Stream herunterladen

Heute enthielt ein E-Mail-Thread einen Link auf folgenden CBN-Videoclip:

Native French under Attack in Muslim Areas

Wie so üblich wollte ich den Clip lokal auf meinem NAS speichern, damit ich ihn mir in einer ruhigen zu Gemüte führen kann, ohne dabei auf eine Internetverbindung angewiesen zu sein.

Ich öffnete deshalb Firefox, startete den Web-Developer-Modus und zeichnete im Tab „Network“ die Netzwerkaktivitäten auf. Dies liefert mir folgende URL, welche ich mit einem Rechtsklick in die Zwischenablage kopierte:

Akamai-URL

Erst nachdem ich den Download dieser URL mit wget gestartet hatte, realisierte ich, dass die Grösse der Datei mit exakt 2 GB angegeben wird:

...
Länge: 2147483647 (2,0G) 
...

Dies, obwohl der Nachrichtenbeitrag nachweislich weniger als vier Minuten lang ist. Während ich Google-Recherchen durchführte, erblickte ich in Terminal.app plötzlich folgenden Hinweis:

...
2015-01-21 21:32:07 (343 KB/s) - Verbindung bei Byte 91428830 geschlossen. Erneuter Versuch.
...

Danach nahm wget die Verbindung wieder auf und lud den Datenmüll weiter herunter.

Rasch realisierte ich, dass dies wohl eine Eigenschaft des Videostream-Servers ist, um die Übertragung des gesamten Streams zu einem bestimmten Zeitpunkt abzubrechen.

Wenig später hatte ich mir die cURL-Kommandozeile zusammengebastelt, welche nur die ersten 91428830 herunterlud:

$ curl -o "muslim.mp4" -r -91428830 "http://cbnhdf-f.akamaihd.net/734546207001/734546207001_34531,60520001_NewsBlock-9AM-041014-HD720-1029-626-1306-946,48268001_NewsBlock-9AM-041014-HD720-1029-626-1306-946,52212001_NewsBlock-9AM-041014-HD720-1029-626-1306-946,60209001_NewsBlock-9AM-041014-HD720-1029-626-1306-946,66563001_NewsBlock-9AM-041014-HD720-1029-626-1306-946,36206001_NewsBlock-9AM-041014-HD720-1029-626-1306-946-copy,.mp4.csmil/bitrate=5?videoId=3453082509001&lineUpId=&pubId=734546207001&playerId=1535799574001&affiliateId=&bandwidthEstimationTest=true&v=3.4.0&fp=MAC%2016,0,0,257&r=WGQXV&g=OWBGOOCJISIC"
...
curl: (18) transfer closed with 2056054817 bytes remaining to read

Und so hatte ich auch dieses Streaming-Video-Biest gezähmt.

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. Dezember 2013

Mit cURL unter Windows das Verhalten eines Tomcat-Servers debuggen

Obwohl ich primär als IT-Auditor unterwegs bin, haben wir uns vor einigen Tagen mit einer Tomcat-basierenden Audit-Applikation herumgeschlagen. Kurz ging es darum, die Kommunikation im Intranet zwingend mit HTTPS zu verschlüsseln. Da der Server mit verschiedenen Domainnamen (teilweise nicht FQDNs) angesprochen werden kann, mussten wir Tomcat zuerst einmal so konfigurieren, dass er alle HTTP-Anfragen auf eine bestimmte Domain umleitete, falls die Anfrage nicht bereits an den korrekten Host gerichtet war (wir haben uns den UrlRewriteFilter) zu Nutze gemacht — und trauerte dabei leise dem (noch) eleganteren mod_rewrite in .htaccess Dateien unter Apache nach …

Item. Da unsere Web-Browser nicht wirklich hilfreich waren, um die Redirects zu analysieren und auch noch ein Enterprise Proxy-Server dazwischenstand, behalf ich mich mit der Win32-Version von cURL, curl.exe mit den Optionen --verbose, um den gesamten Ablauf der Verbindungsaufnahme auf der Kommandozeile auszugeben, sowie mit --noproxy *, um sicherzugehen, dass wir direkt mit dem Server sprachen und den Enterprise Proxy so umgingen. Das Resultat sah folgendermassen aus:

C:\Temp\cURL\> curl.exe --verbose --noproxy * http://software.domain.tld:8080/r2d2/asdf
* Adding handle: conn: 0x1c3def0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x1c3def0) send_pipe: 1, recv_pipe: 0
* About to connect() to software.domain.tld port 8080 (#0)
* Trying 10.0.0.111...
* Connected to software.domain.tld (10.0.0.111) port 8080 (#0)
> GET /r2d2/asdf HTTP/1.1
> User-Agent: curl/7.32.0
> Host: software.domain.tld:8080
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Location: https://protected.domain.tld:8443/r2d2/asdf
< Content-Length: 0
< Date: Wed, 11 Dec 2013 10:35:41 GMT
<
* Connection #0 to host software.domain.tld left intact

Alles Bestens: Anfragen auf http://software.domain.tld:8080/r2d2/asdf werden auf https://protected.domain.tld:8443/r2d2/asdf umgeleitet. Und das Auditorenherz schlägt höher.

Tags: , , , , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. Dezember 2013

Den Netatmo PHP API-Client mit weniger strikten SSL-Anforderungen patchen

Vor einigen Tagen hörte mein Raspberry Pi-Dashboard auf, die Werte meiner Netatmo NWS01 Wetterstation für Apple iPhone und Android anzuzeigen.

Auf meinem lokalen Mac funktionierte das Dashboard hingegen problemlos; d.h. ich konnte mittels dem Netatmo PHP API-Client die JSON-Datei mit den aktuellen Messwerten wie Temperatur, Luftdruck und -feuchtigkeit abrufen.

Die genaue Ursache hinter dem Problem kenne ich bis heute nicht, doch ich vermute mit dem jetzigen Wissensstand, dass die Cyon-Ingenieure an der Konfiguration ihrer Server herumgewerkelt haben und dabei unter anderem das Root-Zertifikat entfernt haben, welches der Netatmo API-Client zur HTTPS-verschlüsselten Kommunikation mit den Netatmo-Servern verwendet.

Nachdem ich nämlich die Exception mittels vardump() genauer betrachtete, welche NACurlErrorType zurücklieferte, war der Fall schnell sonnenklar:

...
[message:protected] => SSL peer certificate or SSH remote key was not OK
...

Nun … gut! Was macht man da? Ich habe die Datei NAApiClient.php gepatcht, indem ich cURL mit der auf false gesetzten Option CURLOPT_SSL_VERIFYHOST sage, unverifizierte SSL-Zertifikate kommentarlos zu akzeptieren:

...
        else 
        {
            $opts[CURLOPT_HTTPHEADER] = array('Expect:');
        }
        
        $opts[CURLOPT_SSL_VERIFYHOST] = false;
        
        curl_setopt_array($ch, $opts);
...

Bei einer API wie Netatmo ist diese manuell herbeigeführte Schwachstelle zu verantworten. Ginge es um Mailverkehr oder Online-Banking, würde ich eine solche Option definitiv nicht aktivieren.

Tags: , , , , , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 18. Oktober 2012

Mit curl eine fortlaufend nummerierte Reihe von Photos in Gallery 2 herunterladen

Nichts leichter als das. Man öffne die Detailansicht des ersten Photos in Gallery 2, notiere sich den Wert der Variable und kopiere die URL. Dasselbe tut man für das letzte Photo des Albums.

Die URL und die zwei Zahlen fügt man in folgenden Kommandozeilenbefehl ein:

curl -f "http://domain.tld/main.php?g2_view=core.DownloadItem&g2_itemId=[39169-39632]&g2_serialNumber=2" -o "#1.jpg"

Erläuterung der Optionen:

  • -f verhindert, dass HTTP-Fehlermeldungen auch als Dateien gespeichert werden — denn es könnte ja sein, dass die Sequenz nicht durchlaufend ist.
  • [39169-39632] definiert den Anfangs und den Endwert der Sequenznummern von Gallery 2
  • -o Speichert die Rückmeldung des Web-Servers in eine Datei und gibt sie nicht auf im Shell aus
  • #1 ist die fortlaufende Nummer. So werden mit -o Dateien mit eindeutigen Dateinamen geschrieben

Quelle: trying to use curl to download a series of files

Tags: , , , , ,
Labels: Web

Keine Kommentare | neuen Kommentar verfassen