13
REST APIを使用してSMSゲートウェイに呼び出しを送信しています。 「こんにちは」のような単純な言葉を送ると、すべてのことがうまくいきますが、スペースを追加すると困ってしまいます。これは、URIにスペースを含めることができないためです。JavaでHttpGetを使用してREST呼び出しでスペースを渡す方法
私は何をする必要があるのですか?
はIllegalArgumentException上の結果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();
}
:
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
編集:私はエンコーダーを使用していますalexey28によって示唆されるように、ここで私は今何をすべきかです:
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);
しかし、ある結果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)
私はここで何が間違っていますか?
一度エンコードされた要求:URLパラメータ値をエンコードするために使用するのURLEncoderを送信する前に要求https://www.example.com/SecureREST/SimpleSMSsend%3FPhoneNumber%3D123%26Message%3DHello%2C+how+are+you%3F
このようにすると、java.lang.IllegalStateExceptionが発生します。ターゲットホストは、nullでもパラメータでも設定できません。私がしたのはこれです:String restUrl = URLEncoder.encode( "https://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message=Hello、どうですか?"、 "UTF-8"); HttpGet httpget = new HttpGet(restUrl); – dukable
私は今私が抱いている問題を反映するために私の最初の投稿を更新しました。 – dukable
@ user1385655メッセージのみをエンコードします。 URLEncoderは、?のようなURLに特別な意味を持つ文字をエンコードします。 &は、URL全体をエンコードすると無効になります。例えば。 'HttpGet(" http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message= "+ URLEncoder.encode("こんにちは元気? "、" UTF-8 "))' – erikxiv