[Java] Inviare dati via HTTP POST
Il protocollo HTTP (Hypertext Transfer Protocol) è fra i più noti protocolli Internet. Il suo uso principale è quello di essere un mezzo per prelevare pagine HTML da mostrare in un browser.
HTTP è un protocollo di richiesta/risposta. Ci sono vari tipi di richieste effettuabili, ognuna delle quali viene identificata da un preciso metodo HTTP. I metodi più noti sono GET e POST.
Una richiesta di tipo POST spedisce dei dati (solitamente inseriti dall'utente in un form web) dopo aver specificato la pagina che analizza i dati spediti, il server, vari header e una linea bianca dopo quest'ultimi. Esempio:
POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
userid=chris&password=indovina
Invio richieste POST in Java
Qui di seguito il codice per inviare richieste POST ad un sito web in Java:
URL url;
URLConnection urlConn;
DataOutputStream printout;
DataInputStream input;
try{
url = new URL ("http://www.sito.com/pagina.php");
urlConn = url.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput (true);
urlConn.setUseCaches (false);
urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// spedisce al server i dati via POST
printout = new DataOutputStream (urlConn.getOutputStream());
String content = "username=" + URLEncoder.encode ("pippo","UTF-8") +
"password=" + URLEncoder.encode ("pippopass","UTF-8");
printout.writeBytes (content);
printout.flush ();
printout.close ();
// Stampa a video la risposta del server linea per linea
BufferedReader bufline = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String str;
while (null != ((str = bufline.readLine()))) {
System.out.println (str);
}
bufline.close ();
}catch(Exception e){
System.out.println("ERRORE: "+e);
}
12:21
|
Categorie:
java
|
This entry was posted on 12:21
and is filed under
java
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
8 comments:
grazie. l'ho usato e funziona.
una precisazione: nei dati di posting, serve un ampersand trale coppie chiave-valore (&).
@Ops dimenticanza, grazie per la precisazione.
ma su che sito l'avete provato?
@novizio: va bene qualsiasi sito abbia un form in cui accetti dati via post. La cosa più semplice che puoi fare è crearti una pagina ad-hoc in locale per effettuare le tue prove.
Ciao!
Perdonami, ma io proprio non ci riesco. sarà che ho sbagliato qualcosa di macroscopico...ad esempio se lo uso per provare a logarmi con il mio account su blogger mi da questo errore: java.io.IOException: Server returned HTTP response code: 405 for URL: https://www.blogger.com/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at URLDialog.main(URLDialog.java:70)
@Novizio: non funziona con https. Provalo su un altro form. Vedi HTTP 405.
Proprio quello che cercavo :)
però ho ancora un problema, non conoscendo i nomi delle input (utente e password) c'è un qualche metodo che le recupera in java una volta connesso alla pagina web? purtroppo non le conosco perchè ogni volta che viene caricata la pagina cambiano.
qualcuno puo aiutarmi?
@PaoloDevi parsarti il codice HTML e recuperare i nomi degli input. Ci saranno sicuramente classi, librerie o packages predisposti per questo senza che tu debba scrivere tutto da zero, fai qualche ricerca ;-)
Posta un commento