Come inviare una richiesta GET a un server in java?

di il
5 risposte

Come inviare una richiesta GET a un server in java?

(premessa: sono una studentessa alle prime armi con la programmazione sulla rete)

Ho provato a inviare un richiesta get a un server con la classe HttpURLConnection, senza usare socket. e ci sono riuscita, vorrei però farlo senza l'ausilio di oggetti java troppo avanzati, Il mio professore dice si possa fare con il metodo .send() (ma l'unico metodo “send” presente invia datagrammi). Essendo costretta a usare i socket ho provato a cercare della documentazione ma niente da fare.

5 Risposte

  • Re: Come inviare una richiesta GET a un server in java?

    Ciao,

    tu hai fatto così ? 

    URL url = new URL("http://etc etc etc.... ");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    int responseCode = conn.getResponseCode();
  • Re: Come inviare una richiesta GET a un server in java?

    Si, più o meno, la logica è quella.

  • Re: Come inviare una richiesta GET a un server in java?

    Per sapere come fare una chiamata HTTP di tipo GET e' necessario  leggersi/studiarsi la documentazione relativa al protocollo HTTP.

    Gli standard li trovi in documenti che si chiamano RFC (Request For Comment). In particolare, per l'HTTP, c'e' l'RFC 2616:

    https://datatracker.ietf.org/doc/html/rfc2616

    Poi ci sono gli RFC correlati, come quelli che descrivono i codici di errore, oppure come fare l'encoding dei caratteri strani nella URL, o come scrivere la URL, tutti disponibili nei link presenti nella pagina indicata sopra.

    QUALUNQUE cosa che abbia a che fare con Internet passa attraverso un RFC: da come e' fatta una URL, come funzion l’HTTP oppure l'FTP, i protocolli POP3/IMAP/SMTP (usati per la posta), ecc.

    Per accedere ad un sito HTTP(S) ci sono n-mila librerie che ne semplificano infinitamente la comunicazione, perche' si prendono in carico di un'infinita' di “sottigliezze” che altrimenti uno si dovrebbe gestire a mano, come la “redirect” (tu vuoi accedere ad una pagina ad una certa URL ma quella pagina e' stata spostata su un'altra URL ed il sito Web te lo dice con un'opportuno codice di errore).

    Una abbastanza comoda da usare fa parte delle librerie Apache Commons (insieme di librerie che TUTTI coloro che sviluppano in Java conoscono o dovrebbero conoscere ;-) )

    https://hc.apache.org/httpcomponents-client-5.2.x/ 

    Apache Commons:

    https://commons.apache.org/ 

    Nota: a quanto sembra il client HTTP e' stato scorporato da Apache commons ;-) 
    Pofforbacco! Ti prendi una pausa per un momento e ti cambiano le carte in tavola ;-)

    https://hc.apache.org/ 

    Nota: non e' vero che non hai usato una socket, la socket c'e', ma non si vede ;-)

  • Re: Come inviare una richiesta GET a un server in java?

    Ho lavorato una sola volta con la socket ma per fa comunicare un server e un client sullo stesso pc (la comunicazioni è riuscita), vorrei farlo allo stesso modo. Come posso procedere? 

  • Re: Come inviare una richiesta GET a un server in java?

    E' QUASI' la stessa cosa, MA bisogna tenere in considerazione le seguenti cose:

    1. l'indirizzo locale e' “localhost” o anche “127.0.0.1”
    2. quando un serve “ascolta”, ascolta su un “certo indirizzo” ed una “certa porta”. Il “protocollo” (in questo caso l'HTTP) usa delle porte “convenzionate” (la 80 o la 443) MA E' SOLO UNA CONVENZIONE, puoi usare QUALUNQUE PORTA non gia' usata. Diciamo, che PER CONVENZIONE, se non e' la 80, si usa la 8080, 8081, … ecc. RIPETO, SONO CONVENZIONI, non un obbligo
    3. l'indirizzo e' un po' piu' complicato: il tu PC ha MOLTI indirizzi che dipendono da:
      1. l'indirizzo “localhost”
      2. la scheda di rete via cavo (ha il suo IP qundo collegata con il cavo)
      3. la scheda di rete WiFi (ha un suo IP diverso dal precedente, quando connesso via WiFi)
      4. eventuali schede di rete “virtuali” installate da certi software, per fare un esempio VMWare, VirtualBox o altri software di virtualizzazione, ma non sono gli unici
      5. ecc.
    4. per evitare problemi, fai in modo che il server ascolti all'indirizzo 0.0.0.0, cioe' ascolta su TUTTI gli indirizzi (l'indirizzo 0.0.0.0 e' un indirizzo riservato apposta per fare queste cose)
    5. spegni il firewall. Non si dovrebbe fare ma per far funzionare le cose serve configurare correttamente anche quello. Spegnendolo ti togli dalle scatole un po' di complicazioni inutili
    6. a questo punto implementa il Server

    .

    Il client va implementato allo stesso modo in cui hai fatto precedentemente, solo che in questo caso non userai 127.0.0.1 MA l'indirizzo assegnato al PC dal tuo router di casa, o dalla rete locale dove e' collegato. Ricorda: NON E' lo stesso in reti locali diverse (casa e universita, per fare un esempio). 

    SE dovesse essere lo stesso, e' SOLO PER UN GRAN COLPO DI C…./fortuna ;-)
    Ma e' altissimissimamente improbabile che cio' avvenga.

    Per sapere quale indirizzo usare, chiedilo a WIndows con “ipconfig” (se Linux, “ifconfig” ma bisogna installarlo, per Mac non so).
    Il tool ti mostrera' TANTI indirizzi. Diciamo salta quelli che finiscono con 1, ed usa i rimanenti. 
    Per mal che vada, provali tutti. Almeno uno DEVE funzionare.


    Altro trucco: per iniziare NON TI SERVE implementare un serve HTTP, ne puoi usare uno gia' esistente.
    Un software comodo da usare e' “Tomcat”:

     https://tomcat.apache.org/

    Scarichi lo zip, lo spacchetti. 

    PICCOLA MODIFICA: vai nella directory “conf”, apri il file “server.xml” e sostituisci tutti i “localhost” con “0.0.0.0”

    Vai nella directoy “bin” e lanci “catalina.bat run”.
    Serve attivo su TUTTI gli indirizzi alla porta 8080.

Devi accedere o registrarti per scrivere nel forum
5 risposte