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

    Richiesta HTTP GET con socket

    Ciao,

    domanda davvero di base, ma mi serve per avere l'inizio del filo:
    utilizzando un socket di basso livello, come si spedisce una richiesta GET in protocollo HTTP ? (senza la necessità di ricevere risposte, solo spedire una richiesta in modo che il server la comprenda ed esegua lo script PHP relativo)

    Quindi il seguente codice che ha di sbagliato (non abbiate pietà per qualsiasi sottigliezza, in fondo sto imparando), perché è come se lo script PHP non ricevesse alcuna richiesta:
    codice:
    // mi trovo in una classe che estende Socket
    // connesso in precedenza con "super(host,port);" nel costruttore
    try{
       OutputStream os=getOutputStream();
       OutputStreamWriter ow=new OutputStreamWriter(os);
       BufferedWriter out=new BufferedWriter(ow);
    
       out.write("GET /mydir/script.php HTTP/1.1");
       out.newLine();
       out.flush();
       out.write("Host: localhost");
       out.newLine();
       out.flush();
       out.newLine();
       os.close();
       out.close();
    }catch(IOException e){
       System.err.println(e.getMessage());
    }
    ogni tipo di suggerimento costruttivo è accetto.
    Grazie in anticipo
    "La mia vita finirà quando non vedrò più la gente ridere.... non necessariamente alle mie battute."

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Richiesta HTTP GET con socket

    Originariamente inviato da Raccoon29
    utilizzando un socket di basso livello, come si spedisce una richiesta GET in protocollo HTTP ?
    Domanda: devi proprio fare la richiesta usando direttamente i socket? È forse un esercizio "didattico" che ti è stato assegnato??

    Perché se non c'è un qualche motivo di fondo serio, didattico o altro del genere, direi che stai perdendo tempo .... usa URL e URLConnection!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    zi zi

    Originariamente inviato da andbin
    Domanda: devi proprio fare la richiesta usando direttamente i socket? È forse un esercizio "didattico" che ti è stato assegnato??
    Sì c'è il motivo
    Comunque per quanto riguarda URL e URLconnection onestamente ancora non ho capito come funzionano e come semplificano il lavoro...forse sono lento io, però...
    (a proposito gli esempi che trovo sono tutti per dei servlet, non c'è un esempio per un normale GET/POST in HTTP? )
    "La mia vita finirà quando non vedrò più la gente ridere.... non necessariamente alle mie battute."

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: zi zi

    Originariamente inviato da Raccoon29
    Sì c'è il motivo
    Ok, comunque dovrei verificare e provare quel tuo codice .... non è che uso tutti i giorni il protocollo HTTP direttamente!!!

    Originariamente inviato da Raccoon29
    Comunque per quanto riguarda URL e URLconnection onestamente ancora non ho capito come funzionano e come semplificano il lavoro
    Se non serve leggere il corpo della risposta:

    codice:
    URL url = new URL("http://www.google.com");
    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    int response = urlConn.getResponseCode();
    Che dici .... semplifica o no??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: zi zi

    Originariamente inviato da andbin
    Che dici .... semplifica o no??
    uhm...notevole

    Ma rimane altrettanto semplice anche nel voler sottomettere una richiesta POST? S'intende sempre ignorando la risposta.

    (fermo restando che mi serve l'informazione del topic)
    "La mia vita finirà quando non vedrò più la gente ridere.... non necessariamente alle mie battute."

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Re: Re: zi zi

    Originariamente inviato da Raccoon29
    Ma rimane altrettanto semplice anche nel voler sottomettere una richiesta POST? S'intende sempre ignorando la risposta.
    Direi di sì:
    codice:
    URL url = new URL( "indirizzo" );
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setDoOutput(true);     // Dobbiamo inviare dati in POST
    con.setDoInput(true);      // Se ci si aspetta di dover leggere una risposta...
    con.setUseCaches(false);   // Evitiamo la cache...
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    PrintWriter output = new PrintWriter(new OutputStreamWriter(con.getOutputStream()));
    output.println("nome_var=" + URLEncoder.encode("valore", "ISO-8859-1"));
    output.flush();
    output.close();
    In questo esempio viene inviata la variabile "nome_var" con valore "valore" all'indirizzo "indirizzo" in POST.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: zi zi

    Originariamente inviato da Raccoon29
    Ma rimane altrettanto semplice anche nel voler sottomettere una richiesta POST?
    Con URLConnection per fare un POST si deve invocare innanzitutto urlConn.setDoOutput(true).
    Poi bisogna vedere se ci sono parametri da passare. Perché se ci sono vanno passati nel "body" della request (scritti sul output stream). E in linea generale (cioè senza sapere esattamente cosa c'è come nomi/valori) vanno codificati in un certo modo, usando URLEncoder.encode() specificando come charset UTF-8.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8

    Ah capisco

    Grazie mille a tutti e due, sicuramente questo è un pezzo molto importante nel mio bagaglio, Di sicuro non mancherà occasione per usarlo!

    A questo punto per rispondere alla domanda del topic, potrei anche andarmi a spulciare i sorgenti Java per vedere come fa lui, perché tanto alla fine di tutto c'è di sicuro l'implementazione di un socket, tutto sta a trovarla...
    Però se qualcuno lo viene a sapere prima di me, dicendolo mi farebbe risparmiare un bel po' di tempo

    Comunque intanto grazie ancora a tutti
    digging
    ciauz
    "La mia vita finirà quando non vedrò più la gente ridere.... non necessariamente alle mie battute."

  9. #9

    Trovato!

    Risolta la questione del topic!
    Ho capito perché non andava, per due semplici motivi:
    1. la codifica dei caratteri doveva essere UTF8
    2. mancava la newline di chiusura
    quindi il codice corretto è
    codice:
    // mi trovo in una classe che estende Socket
    // connesso in precedenza con "super(host,port);" nel costruttore
    try{
       OutputStream os=getOutputStream();
       OutputStreamWriter ow=new OutputStreamWriter(os,"UTF8");
       BufferedWriter out=new BufferedWriter(ow);
    
       out.write("GET /mydir/script.php HTTP/1.1\r\n");
       out.write("Host: localhost\r\n");
       out.write("\r\n");
       out.flush();
       out.close();
    }catch(IOException e){
       System.err.println(e.getMessage());
    }
    HTH
    ciauz
    "La mia vita finirà quando non vedrò più la gente ridere.... non necessariamente alle mie battute."

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.