Sto inviando una chiamata a un gateway SMS utilizzando la loro API REST. Va tutto bene quando invio una semplice parola come "Ciao", ma se aggiungo uno spazio, mi sono messo nei guai. Questo perché l'URI non può contenere spazi.Come passare gli spazi in una chiamata REST utilizzando HttpGet in java
Qual è il modo corretto di fare ciò che devo fare?
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet("http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=hello how are you?");
httpget.addHeader(new BasicHeader("Accept", "application/json"));
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
System.out.println("----------------------------------------");
} finally {
httpclient.getConnectionManager().shutdown();
}
risultante sul IllegalArgumentException:
Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
at main.main(main.java:36)
Caused by: java.net.URISyntaxException: Illegal character in query at index 97: https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello, how are you?
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source)
at java.net.URI$Parser.parse(Unknown Source)
at java.net.URI.<init>(Unknown Source)
... 3 more
Edit: Come suggerito da alexey28 Sto usando l'encoder, qui è quello che faccio ora:
String query = "?PhoneNumber=123&Message=Hello, how are you?";
String host = "https://www.example.com/SecureREST/SimpleSMSsend";
String encodedUrl = host + URLEncoder.encode(query,"utf-8");
HttpGet httpget = new HttpGet(encodedUrl);
ma i risultati in
Exception in thread "main" org.apache.http.client.HttpResponseException: **Bad Request**
at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:67)
at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:54)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:735)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:709)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:700)
at main.main(main.java:47)
Cosa sto facendo di sbagliato qui?
La richiesta, una volta codificata: l'esecuzione di richiesta https://www.example.com/SecureREST/SimpleSMSsend%3FPhoneNumber%3D123%26Message%3DHello%2C+how+are+you%3F
In questo modo risulta un java.lang.IllegalStateException: l'host di destinazione non deve essere nullo o impostato in parametri. Quello che ho fatto è questo: String restUrl = URLEncoder.encode ("https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello, come stai?", "UTF-8"); HttpGet httpget = new HttpGet (restUrl); – dukable
Ho aggiornato il mio post iniziale per riflettere il problema che sto avendo ora. – dukable
@ user1385655 Codifica solo il messaggio. URLEncoder codificherà qualsiasi carattere che abbia un significato speciale in un URL come? e &, quindi codificare l'intero URL lo renderà non valido. Per esempio. 'HttpGet (" http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message= "+ URLEncoder.encode (" ciao come stai? "," UTF-8 "))' – erikxiv