|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2008
Messaggi: 4
|
Richieste HTTP Post in Java
Ciao a tutti,
volevo sviluppare un programma java che, come da titolo, mi generi richieste HTTP con il metodo POST... L'idea è quella di fare un programmino che si colleghi al sito ryanair e data una città di partenza e delle date di partenza e ritorno, mostri le migliori offerte per OGNI destinazione raggiungibile Il sito ryanait utilizza, cm da titolo, il metodo POST per effettuare le richieste. Googolando ho trovato (e modificato secondo le mie richieste...) questo codice ( l'originale lo trovate qui e sostanzialmente identico qui2). Per il momento il programma prende delle destinazioni e dati statiche, ma sarebbe facile estenderlo cm voluto... ecco il codice: Codice:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.net.URL;
import java.net.URLConnection;
import java.io.DataOutputStream;
import java.io.DataInputStream;
class ControllaAerei {
public static void main (String args[]) {
URL url;
URLConnection urlConn;
DataOutputStream printout;
DataInputStream input;
try{
url = new URL ("http://www.bookryanair.com/SkySales/FRSearchRedirect.aspx?culture=it-it&lc=it-it");
urlConn = url.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput (true);
// spedisce al server i dati via POST
printout = new DataOutputStream (urlConn.getOutputStream());
String content =
"travel_type=" + URLEncoder.encode ("on","UTF-8") +
"&SearchBy=" + URLEncoder.encode ("columenView","UTF-8") +
"§or1_o=" + URLEncoder.encode ("aBGY","UTF-8") +
"§or1_d=" + URLEncoder.encode ("BCN","UTF-8") +
"§or_1_d=" + URLEncoder.encode ("29","UTF-8") +
"§or_1_m=" + URLEncoder.encode ("112010","UTF-8") +
"§or_2_d=" + URLEncoder.encode ("21","UTF-8") +
"§or_2_m=" + URLEncoder.encode ("122010","UTF-8") +
"&ADULT=" + URLEncoder.encode ("1","UTF-8") +
"&CHILD=" + URLEncoder.encode ("0","UTF-8") +
"&INFANT=" + URLEncoder.encode ("0","UTF-8") +
"&mode=" + URLEncoder.encode ("0","UTF-8") +
"&pT=" + URLEncoder.encode ("1ADULT","UTF-8") +
"&oP=" + URLEncoder.encode ("","UTF-8") +
"&rP=" + URLEncoder.encode ("","UTF-8") +
"&nom=" + URLEncoder.encode ("2","UTF-8") +
"&date1=" + URLEncoder.encode ("20101129","UTF-8") +
"&date2=" + URLEncoder.encode ("20101221","UTF-8") +
"&m1=" + URLEncoder.encode ("20101129aBGYBCN","UTF-8") +
"&m2=" + URLEncoder.encode ("20101221BCNaBGY","UTF-8") +
"&m1DP=" + URLEncoder.encode ("0","UTF-8") +
"&m1DO=" + URLEncoder.encode ("0","UTF-8") +
"&m2DP=" + URLEncoder.encode ("0","UTF-8") +
"&m2DO=" + URLEncoder.encode ("0","UTF-8") +
"&pM=" + URLEncoder.encode ("0","UTF-8") +
"&tc=" + URLEncoder.encode ("1","UTF-8") +
"&language=" + URLEncoder.encode ("","UTF-8") +
"&culture=" + URLEncoder.encode ("it","UTF-8") +
"&module=" + URLEncoder.encode ("SB","UTF-8") +
"&page=" + URLEncoder.encode ("SELECT","UTF-8") +
"&BalearicUserAnswer=" + URLEncoder.encode ("NO","UTF-8") +
"&acceptTerms=" + URLEncoder.encode ("yes","UTF-8");
//System.out.println (content);
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);
}
}
}
Sono sicuro che i parametri POST sono giusti perchè utilizzando gli stessi con wget da terminale unix ottengo la pagina corretta... Codice:
wget "http://www.bookryanair.com/SkySales/FRSearchRedirect.aspx?culture=it-it&lc=it-it" --post-data=" travel_type=on &SearchBy=columenView §or1_o=aBGY §or1_d=BCN §or_1_d=29 §or_1_m=112010 §or_2_d=21 §or_2_m=212010 &ADULT=1 &CHILD=0 &INFANT=0 &mode=0 &pT=1ADULT &oP= &rP= &nom=2 &date1=20101129 &date2=20101221 &m1=20101129aBGYBCN &m2=20101221BCNaBGY &m1DP=0 &m1DO=0 &m2DP=0 &m2DO=0 &pM=0 &tc=1 &language= &culture=it &module=SB &page=SELECT &BalearicUserAnswer=NO &acceptTerms=yes" -O voli.html Nom riesco a capire cosa ci sia di sbagliato nel programma java... grazie in anticipo, Michele |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Prova a esaminare l'header della risposta http e vedi se risponde con il codice di OK oppure altro... (non conosco wget) magari la risposta è un redirect?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2008
Messaggi: 4
|
guardando le risposte http credo di aver capito quale sia il problema...
la risposta del server (che è sostanzialmente identica nei due casi) contiene un cookie, che con il comando wget viene ritrasmesso, mentre con il programma in Java no... Adesso si tratta 'solo' di capire cm salvare e trasmettere il cookie con java.... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:24.



















