Unshorten URL в Android - PullRequest
       0

Unshorten URL в Android

0 голосов
/ 27 января 2020

Я хотел бы найти окончательный URL для этих типов ссылок, используя java. Они не являются короткими ссылками, такими как bit.ly или goo.gl, однако это URL-адрес, заключенный в другой.

Вот тип ссылки, которую я хотел бы удалить.

Оригинальный URL : https://www.google.com/aclk?sa=l&ai=DChcSEwj0iN_6y6PnAhUPwN4KHfPWB_EYABABGgJ3Yg&sig=AOD64_1QciSaXgHfqYgp_pg90gmtmuswtA&ctype=5&q=&ved=0ahUKEwifgNj6y6PnAhUMmhQKHdF7AKkQ1ikIPw&adurl=

Конечный URL: https://www.schuh.co.uk/kids/youth-nike-air-force-1-white-trainers/2701041020/?gclid=Cj0KCQiAsbrxBRDpARIsAAnnz_M_rzRXEUXD0pW0GeXUGrqHCDSqg-p0cHwQGqKiQ2OPFC5w7iiOCYoaAjfYEALw_wcB

Как получить URL-адрес Schuh?

Ваша помощь очень ценится, спасибо.

1 Ответ

0 голосов
/ 27 января 2020

Вам необходимо выполнить запрос по URL, разрешить перенаправления, а затем получить результирующий URL.

Вот так:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;


public class UrlRetriever {

    private final OkHttpClient httpClient;

    public UrlRetriever(OkHttpClient httpClient) {
        this.httpClient = httpClient;
    }


    public String getRootUrl(String url) {
            try (Response response = httpClient.newCall(buildRequest(url)).execute()) {
                String sourceUrl = response.request().url().toString();

                return sourceUrl;            
            } catch (IOException e) {
                System.err.println("Url retrieval failed for " + url + " (returning self), reason: " + e.getMessage());
                return url;
            }
    }


    private Request buildRequest(String url) {
        try {
            return new Request.Builder()
                    .head()
                    // Act like a browser, because Medium (and maybe others) don't redirect correctly otherwise
                    .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36")
                    .url(url)
                    .build();
        } catch (IllegalArgumentException e) {
            System.err.println("Url retrieval failed for " + url + ". reason: " + e.getMessage());
            throw e;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...