2012-05-15 11 views
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

答えて

24

を実行:

String restUrl = URLEncoder.encode("You url parameter value", "UTF-8"); 

これは、スペースも含め、すべてのシンボルを置換します - >「+」のために適切なものでURL

+1

このようにすると、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

+0

私は今私が抱いている問題を反映するために私の最初の投稿を更新しました。 – dukable

+11

@ user1385655メッ​​セージのみをエンコードします。 URLEncoderは、?のようなURLに特別な意味を持つ文字をエンコードします。 &は、URL全体をエンコードすると無効になります。例えば。 'HttpGet(" http://www.example.com/SecureREST/SimpleSMSsend?PhoneNumber=123&Message= "+ URLEncoder.encode("こんにちは元気? "、" UTF-8 "))' – erikxiv

関連する問題