web-dev-qa-db-fra.com

wget: ne suivez pas les redirections

Comment empêcher wget de suivre les redirections?

45
flybywire

--max-redirect 0

Je n'ai pas essayé cela, il n'en autorisera aucun ou autorisera l'infini ..

45
Matt

Utilisez curl sans -L au lieu de wget. L'omission de cette option lors de l'utilisation de curl empêche la redirection d'être suivie.

Si tu utilises curl -I <URL> vous obtiendrez alors les en-têtes au lieu du HTML de redirection.

Si tu utilises curl -IL <URL>, vous obtiendrez les en-têtes de l'URL, ainsi que ceux de l'URL vers laquelle vous êtes redirigé.

10
Dennis Williamson

Certaines versions de wget ont un --max-redirect option: Voir ici

3
Pekka 웃

wget suit jusqu'à 20 redirections par défaut. Cependant, il ne couvre pas les hôtes. Si vous avez demandé à wget de télécharger example.com, il ne touchera aucune ressource à www.example.com. wget le détectera comme une requête pour s'étendre à un autre hôte et décidera contre.

En bref, vous devriez probablement exécuter:

wget --mirror www.example.com

Plutôt que

wget --mirror example.com

Supposons maintenant que le propriétaire de www.example.com possède plusieurs sous-domaines à example.com et nous nous intéressons à tous. La façon de procéder?

Essaye ça:

wget --mirror --domains=example.com example.com

wget va maintenant visiter tous les sous-domaines de example.com, y compris m.example.com et www.example.com.

3
Tim McNamara

En général, ce n'est pas une bonne idée de dépendre d'un nombre spécifique de redirections.

Par exemple, pour télécharger IntellijIdea, l'URL qui est promis de toujours se résoudre à la dernière version de Community Edition pour Linux est quelque chose comme https://download.jetbrains.com/product?code=IIC&latest&distribution=linux, mais si vous visitez cette URL de nos jours, vous allez être redirigé deux fois (2 fois) avant d'atteindre le fichier téléchargeable réel. À l'avenir, vous pourriez être redirigé trois fois, ou pas du tout.

La façon de résoudre ce problème consiste à utiliser le verbe HTTP HEAD. Voici comment je l'ai résolu dans le cas d'IntellijIdea:

# This is the starting URL.
URL="https://download.jetbrains.com/product?code=IIC&latest&distribution=linux"
echo "URL: $URL"

# Issue HEAD requests until the actual target is found.
# The result contains the target location, among some irrelevant stuff.
LOC=$(wget --no-verbose --method=HEAD --output-file - $URL)
echo "LOC: $LOC"

# Extract the URL from the result, stripping the irrelevant stuff.
URL=$(cut "--delimiter= " --fields=4 <<< "$LOC")
echo "URL: $URL"

# Optional: download the actual file.
wget "$URL"
0
Mike Nakis