PDA

Visualizza la versione completa : [JAVA] Connessione HTTP


lelebug
06-09-2004, 18:26
Ciao a tutti.
Ho un'applicazione e-commerce scritta interamente in php, nel pannello di amministrazione ho creato un form che serve per importare i prezzi di listino da un file ascii spedito dall'utente. In pratica questo form chiede il codice del listino da creare e il nome del file da spedire insieme alla richiesta post.
Lo script php che riceve la richiesta legge il file allegato e crea il listino appropriato in base ai dati contenuti nel file ascii.

Siccome il file ascii viene creato da un mio programma scritto in java che legge i dati da un db access installato sul client, vorrei evitare di far andare l'utente nel form per spedire il file ma fare direttamente tutto dal programmino client "simulando" una richiesta http.

Siccome la prima volta che mi appresto a creare qualcosa del genere volevo qualche consiglio dai pi esperti.

In pratica io vorrei utilizzare lo stesso script php che viene richiamato dal form su internet creando una richiesta post dal programma java che simuli quella del form. E' possibile?

Grazie.
Lele

P.S. Ovviamente non ho accesso al database mysql dall'esterno altrimenti avrei agito direttamente sul db.

lelebug
07-09-2004, 12:06
Sono andato a leggere la documentazione ufficiale (rfc 1867) per implementare un http client che supporti il multipart/form-data (quello di cui ho bisogno perch devo mandare al server sia text field sia file) e seguento le istruzioni contenuto nel documento ho tirato gi questo script di esempio:



public class TestHttp {
public static void main(String[] args) {
String boundary = "Aax095f";
String hostname = "localhost";
try {
Socket s = new Socket(hostname,80);

InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();

String content = "Content-Disposition: form-data; name=\"nome\"\r\n\r\n";
content += "Lele\r\n";
content += "--"+boundary+"--\r\n";

byte[] contentByte = content.getBytes();

out.write("POST /prova.php HTTP/1.0\r\n".getBytes());
out.write(("Host: "+hostname+"\r\n").getBytes());
out.write(("Content-Type: multipart/form-data; boundary="+boundary+"\r\n").getBytes());
out.write(("Content-Lenght: "+contentByte.length+"\r\n\r\n").getBytes());
out.write(("--"+boundary+"\r\n").getBytes());
out.write(contentByte);
out.write("\r\n".getBytes());
int c = 0;
while ((c = in.read()) != -1) {
System.out.print((char)c);
}
} catch (Exception e) {
System.err.println(e);
}
}

}


Quando lo eseguo il server risponde restituendomi la pagina creata da prova.php ma non riesce a leggere la variabile post nome.

Cosa c' che non va? Le sto provando tutte!! :messner:
Grazie
Lele

lelebug
07-09-2004, 18:13
Allora, ci sono quasi, sono riuscito a risolvere parzialmente i miei problemi utilizzando la classe HttpURLConnection.
Ora riesco a passare i dati come se provenissero da un form sul web, ho ancora un problema: oltre a passare i dati del "form" dovrei passare due variabili di sessione. E' possibile? E se possibile come si va?

Grazie

Loading