Ich lade die HTML-Quellseite einer Website mit dem cURL
Befehl herunter . Das Problem ist, ich möchte nicht die meisten Inhalte auf der Seite. Ich brauche nur die ersten 100 Zeilen der Quellseite. Gibt es eine Möglichkeit, den Download der Seite nach den ersten Zeilen zu stoppen?
Derzeit funktioniert der folgende Befehl, aber er scheint nicht zeiteffektiv zu sein.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
Ich habe versucht, den Wert von auf 1
zu ändern , .5
und .05
trotzdem wird die gesamte Webseite heruntergeladen.
Ich suche weniger als eine Sekunde Zeit, um den obigen Befehl auszuführen.
BEARBEITEN
Auf der Manpage von cURL
sehe ich: " Sie sollten sich auch darüber im Klaren sein, dass auf vielen HTTP / 1.1-Servern diese Funktion nicht aktiviert ist. Wenn Sie also versuchen, einen Bereich abzurufen, erhalten Sie stattdessen das gesamte Dokument. " Der Server unterstützt die Bereichsabfrage nicht. Gibt es einen anderen Befehl in der nix
Umgebung, der mir dabei hilft, das zu erreichen, was ich versuche?
Ich habe diese spezielle Anwendung noch nicht wirklich getestet, aber irgendetwas sagt mir, dass Sie hier dd und nc koppeln können:
Netcat (
nc
) erfordert möglicherweise eine weitere Konfiguration, um die Anforderungsheader richtig zu machen. Wenn es sich jedoch um eine öffentliche Site handelt, sollten Sie in der Lage sein, eine nützliche Ausgabe zu finanzieren, wenn Sie es genug versuchen möchten. Sicherlich nimmt dd nur so viel Eingabe entgegen, wie Sie angeben und beenden, wodurch netcat SIGPIPIERT wird, sodass es sofort folgt. Der einzige wirkliche Trick besteht darin, den anfänglichen Handschlag auszubügeln. Sobald Sie den Stream gestartet haben, können Sie ihn jederzeit löschen.BEARBEITEN
Das Lesen der Kommentare von slm hat mich veranlasst, diesem Antrag zuzustimmen. Wenn Sie einen JSON-POST im richtigen Format serialisieren können, ist dies definitiv der richtige Weg, um eine schnellere Antwort zu erhalten. Das Parsen von HTML ist sowieso für die Vögel.
Ein nützlicher Trick zu diesem Zweck besteht darin, Ihren Netzwerkstrom zu erfassen, während Sie mit dem Server in Ihrem Browser kommunizieren. Wenn Ihr Browser dann den POST sendet, der Ihnen das liefert, was Sie möchten, senden Sie ihn stattdessen erneut als GET und sehen Sie sich die Ergebnisse an.
quelle
Der
head
Befehl stoppt normalerweise den Download, bevor er beendet wird (obwohl er bei kurzen Dateien möglicherweise den Pipe-Puffer füllt, bevor die Pipe geschlossen wird). Dies liegt daran, dass beim Schließen einer Pipecurl
nirgendwo geschrieben werden kann (Dateideskriptor ist geschlossen, Schreiben schlägt fehl).Nach meiner Erfahrung wartet das Herunterladen jedoch am längsten auf DNS-Anforderungen (schmerzhaft, wenn Sie Hunderte von Dateien nacheinander herunterladen). Dies kann mit einem lokalen DNS-Cache wie
dnsmasq
unterstützt werden. Wenn Sie denselben Domainnamen mehrmals mit unterschiedlicher Verzeichnisstruktur verwenden, lösen Sie ihn einfach einmal in eine IP auf und ersetzen Sie die URL.Um meinen Standpunkt zu beweisen ... versuchen Sie es mit
time netstat
Versustime netstat -n
(ohne Cache ist der Unterschied dramatisch, mit Cache ist es nur beim ersten Mal schlecht, dann erinnert es sich).quelle