[JAVA] Was tun, wenn beim Herstellen einer Verbindung zu einer externen URL der HTTP-Statuscode 302 auftritt?

Überblick

Wenn Sie beispielsweise ein Programm schreiben, das Dateien von einer externen Site herunterlädt und abruft, kann es je nach Site mit einem Browser heruntergeladen werden. Wenn Sie jedoch die URL über den Code verbinden, kann ein Fehler auftreten. Wenn ich überprüfe, wie es mit einem Browser mit DevTools of Chrome usw. heruntergeladen werden kann, wird der HTTP-Statuscode 302 unter der URL zurückgegeben, auf die ich zugegriffen habe. Dieses Mal werde ich eine Notiz über die Korrespondenz über diesen HTTP-Statuscode 302 schreiben.

Was ist der HTTP-Statuscode 302?

Wie im Artikel Was ist der HTTP-Statuscode "302 Redirect" angegeben, soll 302 eine "temporäre Weiterleitung" haben. Im Fall von 302 ändert sich die im Browser angezeigte URL nicht. Wenn Sie also DevTools usw. nicht verwenden, wird der Benutzer nicht bemerken, dass Sie umgeleitet werden.

Wie man mit dem Programm umgeht

Wenn die 302-Antwort zurückgegeben wird, wird die URL des Umleitungsziels im "Speicherort" des Headers gespeichert. Daher können Sie erneut eine Verbindung zu der an diesem Speicherort gespeicherten URL herstellen. Der StackOverflow-Artikel unter hier stellt die Java-Implementierung vor.

Implementierungsbeispiel

Fast eine Kopie des obigen Artikels zum Stapelüberlauf, aber eine Beispielimplementierung.

Sample.java


public class Sample {

  //Erhalten Sie CSV-Informationen von PhishTank
  public void urlSample() {
    try {
      //Stellen Sie vor der Weiterleitung eine Verbindung zur URL her
      URL url = new URL("https://xxxx/xxxxxx");
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setInstanceFollowRedirects(false);
      String redirectLocation = conn.getHeaderField("Location");
      conn.disconnect();
      //Stellen Sie die Verbindung mit der umgeleiteten URL wieder her
      URL afterRedirectUrl = new URL(redirectLocation);
      InputStreamReader in = new InputStreamReader(afterRedirectUrl.openStream());
      //Danach werden die empfangenen Daten verarbeitet
    } catch (Exception e) {
      //Fehlerbehandlung
    }
  }
}

Recommended Posts

Was tun, wenn beim Herstellen einer Verbindung zu einer externen URL der HTTP-Statuscode 302 auftritt?
[Rails] So stellen Sie über den HTTP-Client eine Verbindung zu einer externen API her (ich habe versucht, eine Verbindung zur Qiita-API herzustellen)
[Swift] Table View Cell, wie man zu einer externen URL springt
Was tun, wenn in einer Lightweight-JRE eine UnsupportedCharsetException auftritt?
So fügen Sie eine externe Bibliothek ein
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
Was tun, wenn ein Fehler auftritt, wenn nokogiri bei der Bundle-Installation eingeht?