web-dev-qa-db-fra.com

org.Apache.http.ProtocolException: l'hôte cible n'est pas spécifié

J'ai écrit un code httprequest/response simple et je reçois l'erreur ci-dessous. J'ai référencé httpclient, httpcore, common-codecs et common-logging dans mon classpath. Je suis très nouveau sur Java et je n'ai aucune idée de ce qui se passe ici. Aidez-moi, s'il vous plaît. 

Code:

import org.Apache.http.client.HttpClient;
import org.Apache.http.client.methods.HttpGet;
import org.Apache.http.HttpResponse;
import org.Apache.http.impl.client.HttpClientBuilder;
import org.Apache.http.Header;
import org.Apache.http.HttpHeaders;

public class UnshorteningUrl {

    public static void main(String[] args) throws Exception
    {           
        HttpGet request=null;
        HttpClient client = HttpClientBuilder.create().build();         

        try {
            request = new HttpGet("trib.me/1lBFzSi");
            HttpResponse httpResponse=client.execute(request);

            Header[] headers = httpResponse.getHeaders(HttpHeaders.LOCATION);
           // Preconditions.checkState(headers.length == 1);
            String newUrl = headers[0].getValue();          
            System.out.println("new url" + newUrl);         
        } catch (IllegalArgumentException e) {
            // TODO: handle exception
        }finally {
            if (request != null) {
                request.releaseConnection();
            }           
        }
    }}

Erreur:

Exception in thread "main" org.Apache.http.client.ClientProtocolException
    at org.Apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.Java:186)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:82)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:106)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:57)
    at UnshorteningUrl.main(UnshorteningUrl.Java:26)
Caused by: org.Apache.http.ProtocolException: Target Host is not specified
    at org.Apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.Java:69)
    at org.Apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.Java:124)
    at org.Apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.Java:183)
    ... 4 more
15
ac11

Le message d'erreur est un peu trompeur. Vous avez fourni une valeur qui ne représente pas un URI complet.

request = new HttpGet("trib.me/1lBFzSi");

Il manque un protocole.

Fournissez simplement un URI complet

request = new HttpGet("http://trib.me/1lBFzSi");
43

Cette erreur est probablement due à une URL incorrecte. Vérifiez l'URL:

  1. protocole manquant;
  2. les paramètres d'URL encodent;
0
Sam