web-dev-qa-db-fra.com

Faites des requêtes parallèles curl plus rapidement

Je dois tester le code de réponse de 1 milliard (oui avec un "B"). Je suis parfaitement conscient que peu importe la façon dont je le tordrai, cela prendra plusieurs jours. J'ai du temps.

Cependant, mon script actuel semble ne faire que ~ 200 par seconde. Ce n'est pas assez rapide. À ce rythme, cela prendra 2 mois.

mycurl() {
    response=$(curl --write-out %{http_code} --silent --output /dev/null http://www.example.com/test/$1)
    echo "$1"
    if [ "$response" == "200" ]; then
        echo "valid" > "enum/$1" | cat
    fi
}
export -f mycurl

i=0

seq 1000000000 | parallel -j0 mycurl

J'ai l'impression que parallel ne va pas aussi vite qu'il le pourrait (c'est-à-dire attendre quelque chose).

J'ai trouvé cela, mais je ne sais pas comment le faire fonctionner: https://www.gnu.org/software/parallel/sem.html

Comment puis-je optimiser mon script?

4
Slava Knyazev

Utilisez --head (ou -I) pour extraire uniquement les en-têtes, plutôt que les en-têtes et le contenu de la page Web. En fonction de la taille des pages Web, cela peut réduire le trafic sur le réseau.

Vous avez déjà spécifié que la sortie doit être supprimée afin de ne pas perdre de temps à l'écrire dans un fichier. Par conséquent, la seule réduction que cela entraînera concerne le serveur et le réseau. Le serveur n'enverra pas réellement la page sur le net, mais il pourra tout de même la générer ou la récupérer à partir du cache.

1
Jos