Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Httpclient 4.1 - HttpGet

    Buonasera,

    sto utilizzando la lib httpclient 4.1

    DEvo eseguire una GET con dei parametri.

    esempio;

    http://www.miosito.com/pippo/paperin...&larghezza=300

    Devo trovare il modo di impostare i parametri 'colore', 'altezza' e 'larghezza' con determinati valori.

    Ora, i costruttori di org.apache.http.client.methods.HttpGet prendono 2 possibili parametri:

    - String
    - URI

    Da quello che ho trovato in rete, HttpGet ha anche il metodo

    - setParams( HttpParams )

    Ma con entrambi i metodi non riesco correttamente ad ottenere la URL corretta (con i parametri encodati)

    Come posso risolvere, continuando a utilizzare httpclient 4.1?

    PS: non vorrei passare la String esatta al costruttore di HttpGet, questa vorrei fosse l'ultima possibiltà.

    Vorrei essere un po' più object oriented...

  2. #2

    Re: [JAVA] Httpclient 4.1 - HttpGet

    Originariamente inviato da ragnonerodocet
    Vorrei essere un po' più object oriented...
    I parametri get ovviamente si scrivono insieme all'url ..
    Ti consiglio di usare la classe URLConnection del package java.net, che funziona così:
    codice:
            URLConnection conn = new URLConnection(new URL("http://www.google.it").openConnection());
            BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                    conn.getInputStream()));
            String inputLine;
    
            while ((inputLine = in.readLine()) != null) 
                System.out.println(inputLine);
            in.close();
    Tu vorresti essere + object oriented... allora che ne dici magari di estendere URL e di fare un overload di openConnection con una HashMap con i parametri get che poi tu concatenerai all'url ?
    lolide
    Java Programmer

    Informati

  3. #3
    Da documentazione

    The abstract class URLConnection is the superclass of all classes that represent a communications link between the application and a URL.

    Però ho la limitazionedi utilizzare HttpGet e HttpCLient

    codice:
    HttpGet getMethod = new HttpGet(miaUrl);
    		
    		new DefaultHttpClient().execute(getMethod);
    Se non ho capito male, utilizzare URLConnection significherebbe cambiare oggetti di dominio.

    Allora io mi chiedo:

    con setParams della classe HttpGet i parametri non si encodano alla URL

    non mi va di utilizzare il costruttore di HttpGet con String.

    Mi rimane il costruttore che prende come argomento un oggetto di tipo URL.

    O sbaglio?

    PS: e comunque URL ha diversi costruttori che prendono tutti come argomenti stringhe. AL massimo posso estendere URL e prendere come parametro di costyruttore un ArrayList o una List.

    Che ne pensi?

  4. #4
    Originariamente inviato da ragnonerodocet
    Se non ho capito male, utilizzare URLConnection significherebbe cambiare oggetti di dominio.
    Questa non l'ho capita ...

    Originariamente inviato da ragnonerodocet
    Allora io mi chiedo:

    con setParams della classe HttpGet i parametri non si encodano alla URL
    L'encode delle entities lo devi fare tu con un replaceAll nella stringa.

    Originariamente inviato da ragnonerodocet
    non mi va di utilizzare il costruttore di HttpGet con String.

    Mi rimane il costruttore che prende come argomento un oggetto di tipo URL.

    O sbaglio?

    PS: e comunque URL ha diversi costruttori che prendono tutti come argomenti stringhe. AL massimo posso estendere URL e prendere come parametro di costyruttore un ArrayList o una List.

    Che ne pensi?
    O URL o direttamente HttpGet è uguale...
    Fare l'overload del costruttore non funziona, perchè devi chiamare il costruttore di base alla prima riga, quindi non risolvi.

    Comunque setParams è un metodo che eredita da una superclasse... quindi può darsi che non viene usato in questa classe, oppure setta i parametri nell'header http.
    Come t'ho detto i parametri delle richieste get vanno messi nell'url, quindi è inutile fare metodi di get e di set di questi, visto che li puoi fare tu esternamente.

    Fai una cosa del genere:
    codice:
            public class TuoHttpGet extends HttpGet {
                public TuoHttpGet (URL url) {
                    super(url);
                }
                public void eseguiGet (HashMap<String, String> mappaParametriRequest) {
                    // accodi i parametri all'url e fai la richiesta.
                }
            }
    Correggo il codice di prima che è sbagliato:
    codice:
            URLConnection conn = new URL("http://www.google.it").openConnection();
            BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                    conn.getInputStream()));
            String inputLine;
    
            while ((inputLine = in.readLine()) != null) 
                System.out.println(inputLine);
            in.close();
    Secondo me per un semplice GET è molto più semplice usare URLConnection. Ma se sei obbligato con HttpClient allora amen
    lolide
    Java Programmer

    Informati

  5. #5
    Originariamente inviato da lolide

    L'encode delle entities lo devi fare tu con un replaceAll nella stringa.
    quindi se la mia URL di partenza è

    www.pippo.com/ciccio

    e i parametri sono nome=paperino e cognome=paperoni

    prendo uno StringBuffer e tutti a casa.... Un bel ciclo for con l'HashMap e siamo tutti contenti. O sbaglio?

    Originariamente inviato da lolide
    Fare l'overload del costruttore non funziona, perchè devi chiamare il costruttore di base alla prima riga, quindi non risolvi.
    Maledetta programmazione ad oggetti...

  6. #6

    HttpClient error

    Salve ho un piccolo ma forse grande problema,
    sto cercando di fare un httpget su di httpclient però con connessione https;
    nel codice ho:


    URI uri=URIUtils.createURI("https", "www.sito.it", 12081, "/cgi-bin/zscp", URLEncodedUtils.format(nvps, "UTF-8"), null);

    HttpGet httpget2 = new HttpGet(uri);

    System.out.println(httpget2.getURI());

    httpget2.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1");

    HttpResponse response=httpclient.execute(httpget2);
    HttpEntity entity = response.getEntity();


    la system.out mi stampa il presupposto uri.
    che se copiato nel browers nella barra degli indirizzi fa il dovuto, ossia loggarsi ad un captive portal.
    invece eseguito tutto il codice in eclipse non lo fa.

    Con UrlConnection ho provato, e funziona ma a me serve HTTPClient per la tesi.
    AIUTO!!!!!!!

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Giovinazzo
    Salve ho un piccolo ma forse grande problema,
    Non risollevare discussioni vecchie per porre nuovi problemi: apri una discussione nuova.
    Inoltre, il codice va formattato usando il tag [CODE].

    Per queste e altre regole, consulta il Regolamento di quest'area.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.