Obtenez l'URL de la destination de la redirection HTTP en Java

Aperçu

Version Java 11

Enregistrez le contenu suivant sous le nom de fichier GetRedirect.java.

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Optional;

public class GetRedirect {

  public static void main(String[] args) throws Exception {

    //Obtenir des arguments de ligne de commande
    String srcUrl = args[0];

    //Obtenir l'URL de destination de la redirection
    Optional<String> redirectUrl = getRedirectUrl(srcUrl);

    //URL de destination de la redirection de sortie
    redirectUrl.ifPresent(url -> System.out.println(url));
  }

  //Obtenez l'URL de destination de la redirection
  public static Optional<String> getRedirectUrl(String srcUrl) throws URISyntaxException, IOException, InterruptedException {

    //Créer des informations de requête HTTP
    HttpRequest req = HttpRequest.newBuilder(new URI(srcUrl)).GET().build();

    //Requête HTTP
    //Notez que HttpClient ne lève pas d'exception pour 4xx et 5xx
    HttpClient client = HttpClient.newBuilder()
      .version(HttpClient.Version.HTTP_1_1)
      .followRedirects(HttpClient.Redirect.NEVER) //Paramètre de ne pas rediriger automatiquement
      .build();
    HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());

    //Obtenir l'en-tête Location à partir de la réponse HTTP
    return res.headers().firstValue("location");
  }
}

Exemple d'exécution par Java 11 (AdoprOpenJDK 11.0.8) + macOS Catalina.

$ java GetRedirect.java https://bit.ly/3kmTOkc
https://t.co/yITSBp4ino
$ java GetRedirect.java https://t.co/yITSBp4ino
https://qiita.com/niwasawa
$ java GetRedirect.java https://qiita.com/niwasawa

Version Java 8

Enregistrez le contenu suivant sous le nom de fichier GetRedirect.java.

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class GetRedirect {

  public static void main(String[] args) throws IOException {

    //Obtenir des arguments de ligne de commande
    String srcUrl = args[0];

    //Obtenir l'URL de destination de la redirection
    String redirectUrl = getRedirectUrl(srcUrl);

    //URL de destination de la redirection de sortie
    if (redirectUrl != null) {
      System.out.println(redirectUrl);
    }
  }

  //Obtenez l'URL de destination de la redirection
  public static String getRedirectUrl(String srcUrl) throws IOException {
    //Notez que 4xx et 5xx ne lèvent pas d'exception
    HttpURLConnection con = (HttpURLConnection) new URL(srcUrl).openConnection();
    con.setRequestMethod("GET");
    con.setInstanceFollowRedirects(false); //Paramètre de ne pas rediriger automatiquement
    con.connect();
    //Obtenir l'en-tête Location à partir de la réponse HTTP
    String location = con.getHeaderField("location");
    con.disconnect();
    return location;
  }
}

Exemple d'exécution par Java 8 (AdoprOpenJDK 1.8.0_265) + macOS Catalina.

compiler.

$ javac GetRedirect.java

Courir.

$ java GetRedirect https://bit.ly/3kmTOkc
https://t.co/yITSBp4ino
$ java GetRedirect https://t.co/yITSBp4ino
https://qiita.com/niwasawa
$ java GetRedirect https://qiita.com/niwasawa

Matériel de référence

Recommended Posts

Obtenez l'URL de la destination de la redirection HTTP en Java
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
Source utilisée pour obtenir l'URL de la source de redirection en Java
Obtenez le résultat de POST en Java
Obtenez l'URL publique du fichier privé de Flickr en Java
[Java] Comment obtenir l'URL de la source de transition
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
[Java] Obtenez le jour d'un jour spécifique
Comment obtenir la date avec Java
L'histoire de l'écriture de Java dans Emacs
Comment obtenir la longueur d'un fichier audio avec Java
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
[Java] Accéder à l'URL signée de s3 (version signée 2)
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
Ressentez le passage du temps même à Java
[Java] Comment obtenir l'URL redirigée finale
Importer des fichiers de la même hiérarchie en Java
[Rails] Obtenez le nom du chemin de l'URL avant la transition et modifiez la destination du lien
Dans spring-security, l'URL de redirection de mon écran de connexion est incorrecte et la connexion échoue.
Exemple de code pour obtenir les valeurs de type SQL clés dans Java + MySQL 8.0
Obtenez le nom du scénario de test dans la classe de test JUnit
[Java] Comment obtenir la valeur maximale de HashMap
Modifier la qualité de stockage des images JPEG en Java
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
Remplacez seulement une partie de l'hôte URL par java
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Obtenir des informations EXIF en Java
[Java] Obtenir KClass en Java [Kotlin]
Implémentation Java de tri-tree
Comment obtenir le nom d'une classe / méthode exécutée en Java
A été effectué dans l'année de base de la semaine calendaire Java
Une explication rapide des cinq types de statique Java
Obtenu le jour ouvrable suivant la date spécifiée avec JAVA
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Comptez le nombre de chiffres après la virgule décimale en Java
Corrigez le code de caractère en Java et lisez à partir de l'URL
Comment dériver le dernier jour du mois en Java
Exemple de code pour obtenir les valeurs des principaux types SQL dans Java + Oracle Database 12c
Accéder à l'interface réseau avec Java
[Java] Supprimer les éléments de la liste
[Java] Obtenez des informations sur la date 10 jours plus tard en utilisant la milliseconde dans la classe Date
Devinez le code de caractère en Java
Examiner les informations système de l'environnement d'exploitation AWS Lambda en Java
[Java1.8 +] Obtenez la date du jour × suivant avec LocalDate
[Édition Java] Histoire de la sérialisation
Obtenez une instance proxy du composant lui-même dans Spring Boot
Spécifiez l'emplacement Java dans eclipse.ini
Sortie de la différence entre chaque champ de deux objets en Java
Examiner la liste des polices disponibles dans AWS Lambda + Java