Je télécharge la page source HTML d'un site Web à l'aide de la cURL
commande. Le problème est que je ne veux pas la plupart du contenu de la page. J'ai juste besoin des 100 premières lignes de la page source. Existe-t-il un moyen d'arrêter le téléchargement de la page après les premières lignes?
Actuellement, j'ai la commande ci-dessous qui fonctionne mais elle ne semble pas être efficace en temps.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
J'ai essayé de changer la valeur de 1
la .5
et .05
et encore la page Web entière est obtenir téléchargé.
Je regarde le temps moins d'une seconde pour exécuter la commande ci-dessus.
ÉDITER
À partir de la page de manuel de cURL
, je vois que " Vous devez également savoir que de nombreux serveurs HTTP / 1.1 n'ont pas cette fonctionnalité activée, de sorte que lorsque vous essayez d'obtenir une plage, vous obtiendrez à la place le document entier. " Donc, si le serveur ne prend pas en charge l'interrogation de plage, existe-t-il une autre commande dans l' nix
environnement qui m'aidera à accomplir ce que j'essaie de faire?
Je n'ai pas encore vraiment testé cette application particulière, mais quelque chose me dit que vous pouvez associer dd et nc ici:
Netcat (
nc
) peut nécessiter une configuration supplémentaire pour obtenir les bons en-têtes de demande, mais s'il s'agit d'un site public, vous devriez pouvoir finagler une sortie utile si vous vous souciez suffisamment d'essayer. Certes, dd n'acceptera que la quantité que vous spécifiez et quittera, ce qui fera SIGPIPE netcat pour qu'il suive immédiatement. La seule véritable astuce consiste à aplanir la poignée de main initiale - une fois que vous démarrez le flux, vous pouvez le supprimer à tout moment.ÉDITER
La lecture des commentaires de slm m'a incité à appuyer cette motion; si vous pouvez sérialiser un JSON POST au format correct, c'est certainement la voie à suivre pour une réponse plus rapide. L'analyse HTML est pour les oiseaux de toute façon.
Une astuce utile à cette fin consiste à capturer votre flux réseau tout en communiquant avec le serveur dans votre navigateur, puis lorsque votre navigateur envoie le POST qui vous donne ce que vous voulez, envoyez-le à nouveau à la place en tant que GET et regardez les résultats.
la source
La
head
commande arrête généralement le téléchargement avant la fin (bien que pour les fichiers courts, elle puisse remplir le tampon du tube avant la fermeture du tube). En effet, lorsqu'un canal est fermé,curl
n'a nulle part où écrire (le descripteur de fichier est fermé, l'écriture échoue).Cependant, selon mon expérience, la chose la plus longue lors du téléchargement est en attente de requêtes DNS (douloureuse lorsque vous téléchargez des centaines de fichiers séquentiellement). Cela peut être aidé avec un cache DNS local comme
dnsmasq
ou, si vous utilisez plusieurs fois le même nom de domaine avec une structure de répertoire différente, résolvez-le une fois sur IP et effectuez un remplacement sur l'URL.Pour prouver mon point ... essayez
time netstat
versustime netstat -n
(sans cache la différence est dramatique, avec cache, c'est seulement mauvais la première fois, alors ça se souvient).la source