Tôi đang gửi một cuộc gọi đến một cổng SMS bằng cách sử dụng API REST của họ. Mọi thứ đều ổn khi tôi gửi một từ đơn giản như 'Xin chào', nhưng nếu tôi thêm một khoảng trống thì tôi gặp rắc rối. Điều này bởi vì URI không thể chứa dấu cách.Cách chuyển dấu cách trong một cuộc gọi REST bằng cách sử dụng HttpGet trong java
Cách thích hợp để làm những gì tôi cần làm là gì?
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();
}
Kết quả trên 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: Theo đề nghị của alexey28 Tôi đang sử dụng Encoder, đây là những gì tôi làm bây giờ:
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);
Nhưng là kết quả trong
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)
Tôi đang làm gì sai ở đây?
Yêu cầu khi mã hóa: thực hiện theo yêu cầu https://www.example.com/SecureREST/SimpleSMSsend%3FPhoneNumber%3D123%26Message%3DHello%2C+how+are+you%3F
Làm như vậy dẫn đến một java.lang.IllegalStateException: Máy chủ đích không được rỗng hoặc được đặt trong tham số. Những gì tôi đã làm là: String restUrl = URLEncoder.encode ("https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello, bạn thế nào?", "UTF-8"); HttpGet httpget = new HttpGet (restUrl); – dukable
Tôi đã cập nhật bài đăng đầu tiên của mình để phản ánh vấn đề tôi đang gặp phải. – dukable
@ user1385655 Chỉ mã hóa tin nhắn. URLEncoder sẽ mã hóa bất kỳ ký tự nào có ý nghĩa đặc biệt trong một URL chẳng hạn như? và &, do đó, mã hóa toàn bộ URL sẽ làm cho URL không hợp lệ. Ví dụ. 'HttpGet (" http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message= "+ URLEncoder.encode (" xin chào bạn thế nào? "," UTF-8 "))' – erikxiv