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

    Comporre richiesta HTTP POST

    Ciao a tutti!

    sto sviluppando un programma che mi consenta di inviare automaticamente dei dati su ebay, dal loro supporto ho ottenuto il modello della richiesta HTTP da effettuare per inoltrare i dati direttamente:
    codice:
    POST /path/to/upload/script HTTP/1.0
    Connection: Keep-Alive
    User-Agent: My Client App v1.0
    Host: https://bulksell.ebay.com/ws/eBayISA...ExchangeUpload
    Content-type: multipart/form-data; boundary=THIS_STRING_SEPARATES
    Content-Length: 256
    --THIS_STRING_SEPARATES
    Content-Disposition: form-data; name="token"
    12345678987654321
    --THIS_STRING_SEPARATES
    Content-Disposition: form-data; name="file";
    filename="listings.csv"
    Content-Type: text/csv
    ... contents of listings.csv ...
    --THIS_STRING_SEPARATES-

    ho cercato di realizzare la richiesta in questo modo, leggendo i contenuti del file che il mio programma ha preparato in precedenza, ma ottengo un errore 400 come risposta:

    ho notato che non riesco a inserire quell' "/path/to/upload/script HTTP/1.0" a fianco a "POST"

    codice:
    try{
    	URL url = new URL("https://bulksell.ebay.com/ws/eBayISAPI.dll?FileExchangeUpload");
    	HttpURLConnection connessione = (HttpURLConnection)url.openConnection();
    	connessione.setDoInput (true);
    	connessione.setDoOutput (true);
    	connessione.setUseCaches (false);
    	connessione.setRequestMethod("POST");
    	connessione.setRequestProperty("Connection", "Keep-Alive");
    	connessione.setRequestProperty("User-Agent", "BdMButler");
    	connessione.setRequestProperty("Host", "https://bulksell.ebay.com/ws/eBayISAPI.dll?FileExchangeUpload");
    	connessione.setRequestProperty("Content-type", "multipart/form-data; boundary=THIS_STRING_SEPARATES");
    
    	//apro lo stream output
    	DataOutputStream dos = new DataOutputStream(connessione.getOutputStream());
    	dos.writeBytes("--THIS_STRING_SEPARATES\r\n");
    	dos.writeBytes("Content-Disposition: form-data; name=\"token\"\r\n");
    	dos.writeBytes("12345678987654321\r\n");
    	dos.writeBytes("--THIS_STRING_SEPARATES\r\n");
    	dos.writeBytes("Content-Disposition: form-data; name=\"file\";\r\n");
    	dos.writeBytes("filename=\"listings.csv\"\r\n");
    	dos.writeBytes("Content-Type: text/csv\r\n");
    
    	//legge il csv
    	FileInputStream fileInputStream = new FileInputStream( new File("modificheEbay.csv") );
    	int bufferSize = fileInputStream.available();
    	byte[] buffer = new byte[bufferSize];
    	int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    	while(bytesRead>0) {
    		dos.write(buffer, 0, bufferSize);
    		bufferSize = fileInputStream.available();
    		bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    	}
    	fileInputStream.close();
    	dos.writeBytes("\r\n");
    	dos.writeBytes("--THIS_STRING_SEPARATES-\r\n\r\n");
    
    	//legge la risposta dal server
    	BufferedReader inStream = new BufferedReader(new InputStreamReader ( connessione.getInputStream()));
    	String str;
    	while (( str = inStream.readLine()) != null) {
    		System.out.println("Server response is: "+str);
    		System.out.println("");
    	}
    	inStream.close();
    	
    } catch (MalformedURLException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    }

    qualcuno ha idea di dove sia il mio errore ed eventualmente come risolverlo?

  2. #2
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    ---
    La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.

  3. #3
    la risposta di Lomio non è che mi sia stata di grande aiuto

    qualcuno può darmi qualche consiglio in più?

  4. #4
    Guardati apache httpclient (http://hc.apache.org/httpclient-3.x/)
    è una libreria che mette a disposizione delle classi per eseguire POST e GET.

    Con questa libreria tu crei degli oggetti PostMethod ai quali passi i parametri che vuoi, e poi tramite la classe HttpClient esegui il post.

    Con quello vai sicuro senza problemi. ciao!

    Edit: se avessi bisogno di un esempio, dimmelo che lo certo tra la roba che ho e te lo passo! ciao!

  5. #5
    Grazie mille! inizio a studiarmi la documentazione

    se hai qualche esempio di HttpPost, te ne sarei grato

  6. #6
    Ti mostro un esempio di POST (ovviamente i dati sono tutti inventati):

    codice:
    	public static void connectionTest(){
    		HttpClient client = new HttpClient();
    		PostMethod post = new PostMethod("http://www.sito.it/login.php");
    		post.addParameter("username", "aaaa");
    		post.addParameter("password", "bbbb");
    		post.addParameter("login_flag", "0");
    		post.addParameter("replenish_type", "0");
    		post.addParameter("h_url", "");
    		try {
                            //restituisce il codice http dell'operazione
    			int res = client.executeMethod(post);
                           
                            //a questo punto il post è fatto. Dall'oggetto PostMethod puoi anche 
                            //leggerti la pagina html successiva al post.
                            //PostMethod mette a disposizione vari metodi per farlo
                            //e ti consiglio di usare getResponseBodyAsStream(), che ritorna un
                            //InputStream.
                            //Esiste  anche getResponseBodyAsString(), ma usalo con cautela perché
                            //se la pagina di risposta è immensa, vai in OutOfMemory.
    		} catch (HttpException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    Edit: come vedi, il codice è moooooolto più snello.
    2 oggetti creati, un po' di parametri aggiunti, una riga per fare il POST.

    Spero di averti aiutato, ciao!

  7. #7
    Ho provato e sembra funzionare per quanto riguarda la composizione e l'invio

    il problema è che ricevo un errore derivante dal fatto che i dati inviati non sono ben formati, come dovrei fare per inviare un messaggio uguale a quello che ho postato all'inizio di questo thread?

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.