Не удается получить расширенный URL из сокращенного URL в Java - PullRequest
0 голосов
/ 12 мая 2018

У меня есть следующий код, который расширяет сокращенный URL-адрес.

import java.io.IOException;

import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URL;
public class ExpandUrl {

    public static void main(String[] args) throws IOException {
        String shortenedUrl = "2q3GMg0"; //read note at the bottom. 
        String expandedURL = ExpandUrl.expand(shortenedUrl);
        System.out.println("expanded url is :  " + expandedURL); 
    }

    public static String expand(String shortenedUrl) throws IOException {
        URL url = new URL(shortenedUrl);    
        // open connection
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); 

      int status = 0;
      try {
          status = httpURLConnection.getResponseCode();
      } catch (IOException e) {
          e.printStackTrace();
      }

      System.out.println("status is " + status);

        // stop following browser redirect
        httpURLConnection.setInstanceFollowRedirects(false);

        // extract location header containing the actual destination URL
        String expandedURL = httpURLConnection.getHeaderField("Location");
        httpURLConnection.disconnect();

        return expandedURL;
    }
}

Код расширяет некоторые URL-адреса, но возвращает нулевой для некоторых других URL-адресов.Например: он расширяет 2q3GMg0, но возвращает ноль, когда я использую 9mglq8, хотя код состояния для этого равен 200.Я проверил оба URL.Оба действительны и имеет расширенную форму.

Примечание: Stackoverflow не позволил мне поместить сокращенную ссылку в тело, поэтому я только что упомянул хеш-код.

Редактировать: Ссылки, для которых я получаю нулевое значение, не имеют поля заголовка Location.В таком случае, как мне получить исходную расширенную ссылку?

status is 200
Key: null  value: [HTTP/1.1 200 OK]
Key: X-Cache  value: [Hit from cloudfront]
Key: Server  value: [Apache]
Key: Connection  value: [keep-alive]
Key: Last-Modified  value: [Sat, 12 May 2018 12:06:48 GMT]
Key: Date  value: [Sat, 12 May 2018 12:11:30 GMT]
Key: Via  value: [1.1 587a74dd892ff33ecf276aa569c8b68a.cloudfront.net (CloudFront)]
Key: X-Frame-Options  value: [SAMEORIGIN]
Key: Accept-Ranges  value: [bytes]
Key: Cache-Control  value: [max-age=120, s-maxage=120, public]
Key: X-Amz-Cf-Id  value: [-p1_VjHmvcGCI1PbQelSHpUectu_5NfCFUnPu_NUHCJ9_2lS2rTmlA==]
Key: Vary  value: [Accept-Encoding]
Key: X-XSS-Protection  value: [1]
Key: Content-Length  value: [186539]
Key: Age  value: [108]
Key: Content-Type  value: [text/html]

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Если код состояния 200, перенаправление отсутствует, и в заголовке не будет поля Location, поэтому при попытке получить доступ к значению ключа Location возвращается ноль.Вы можете получить расширенный URL, используя httpURLConnection.getURL().

Если код состояния 301 или 302, существует перенаправление и в заголовке будет поле Location.Вы можете получить перенаправленный URL-адрес как:

String expandedURL = httpURLConnection.getHeaderField("Location");

, как вы сделали.

надеюсь, это поможет.

0 голосов
/ 12 мая 2018

Вероятно, прокси блокирует.

РЕДАКТИРОВАТЬ: Кто бы ни проголосовал за это: я пробовал оба URL-адреса bit.ly, и оба они работают нормально.

...