| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Java 簡易Httpクライアント」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Java 簡易Httpクライアント== [Java] ===Jakarta commons HttpClient=== *http://hc.apache.org/httpclient-3.x/ ===SimpleHttpクライアント=== <blockquot…」)
 
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
==Java 簡易Httpクライアント==
+
==[[Java 簡易Httpクライアント]]==
[Java]
+
[[Java]] |
 
===Jakarta commons HttpClient===
 
===Jakarta commons HttpClient===
 
*http://hc.apache.org/httpclient-3.x/
 
*http://hc.apache.org/httpclient-3.x/
6行目: 6行目:
  
 
===SimpleHttpクライアント===
 
===SimpleHttpクライアント===
<blockquote>上記が使えない状況があったので、HttpURLConnectionを利用して簡易版を自作</blockquote>
+
&lt;blockquote&gt;上記が使えない状況があったので、HttpU[[R]]LConnectionを利用して簡易版を自作&lt;/blockquote&gt;
  import java.io.BufferedReader;
+
  import java.io.Buffered[[R]]eader;
  import java.io.InputStreamReader;
+
  import java.io.InputStream[[R]]eader;
 
  import java.io.PrintWriter;
 
  import java.io.PrintWriter;
 
  import java.io.UnsupportedEncodingException;
 
  import java.io.UnsupportedEncodingException;
  import java.net.HttpURLConnection;
+
  import java.net.HttpU[[R]]LConnection;
  import java.net.URL;
+
  import java.net.U[[R]]L;
  import java.net.URLEncoder;
+
  import java.net.U[[R]]LEncoder;
 
  import java.util.List;
 
  import java.util.List;
 
  import java.util.Map;
 
  import java.util.Map;
20行目: 20行目:
 
  import org.slf4j.Logger;
 
  import org.slf4j.Logger;
 
  import org.slf4j.LoggerFactory;
 
  import org.slf4j.LoggerFactory;
  import org.springframework.stereotype.Service;
+
  import org.springframework.stereotype.Ser[[vi]]ce;
 
   
 
   
 
  /**
 
  /**
   * Webサービス利用クライアント
+
   * [[Webサービス]]利用クライアント
 
   */
 
   */
  public class ServiceClient {
+
  public class Ser[[vi]]ceClient {
 
      
 
      
 
     /**
 
     /**
       * Webサービスに、HTTP GET リクエストを送信し、結果を取得する
+
       * [[Webサービス]]に、HTTP GET リクエストを送信し、結果を取得する
 
       * @param url
 
       * @param url
 
       * @param headers
 
       * @param headers
 
       * @return
 
       * @return
 
       */
 
       */
     public static Response sendGetRequest(String url, Map<String, List<String>> headers) {
+
     public static [[R]]esponse sendGet[[R]]equest(String url, Map&lt;String, List&lt;String&gt;&gt; headers) {
         return sendRequest(url, "GET", null, null, headers);
+
         return send[[R]]equest(url, "GET", null, null, headers);
 
     }
 
     }
 
      
 
      
 
     /**
 
     /**
       * Webサービスに、HTTP GET リクエストを送信し、結果を取得する
+
       * [[Webサービス]]に、HTTP GET リクエストを送信し、結果を取得する
 
       * @param url
 
       * @param url
 
       * @param parameters
 
       * @param parameters
44行目: 44行目:
 
       * @return
 
       * @return
 
       */
 
       */
     public static Response sendGetRequest(String url, Map<String, String> parameters, Map<String, List<String>> headers) {
+
     public static [[R]]esponse sendGet[[R]]equest(String url, Map&lt;String, String&gt; parameters, Map&lt;String, List&lt;String&gt;&gt; headers) {
         return sendRequest(url, "GET", parameters, null, headers);
+
         return send[[R]]equest(url, "GET", parameters, null, headers);
 
     }
 
     }
 
     /**
 
     /**
       * Webサービスに、HTTP POST リクエストを送信し、結果を取得する
+
       * [[Webサービス]]に、HTTP POST リクエストを送信し、結果を取得する
 
       * @param url
 
       * @param url
 
       * @param parameters
 
       * @param parameters
54行目: 54行目:
 
       * @return
 
       * @return
 
       */
 
       */
     public static Response sendPostRequest(String url, Map<String, String> parameters , Map<String, List<String>> headers) {
+
     public static [[R]]esponse sendPost[[R]]equest(String url, Map&lt;String, String&gt; parameters , Map&lt;String, List&lt;String&gt;&gt; headers) {
         return sendRequest(url, "POST", parameters, null, headers);
+
         return send[[R]]equest(url, "POST", parameters, null, headers);
 
     }
 
     }
 
      
 
      
 
     /**
 
     /**
       * Webサービスに、XMLを伴ったリクエストを送信し、結果を取得する
+
       * [[Webサービス]]に、XMLを伴ったリクエストを送信し、結果を取得する
 
       * @param url
 
       * @param url
 
       * @param method
 
       * @param method
66行目: 66行目:
 
       * @return
 
       * @return
 
       */
 
       */
     public static Response sendRequestWithXml(String url, HttpMethod method, String xml, Map<String, List<String>> headers) {
+
     public static [[R]]esponse send[[R]]equestWithXml(String url, HttpMethod method, String xml, Map&lt;String, List&lt;String&gt;&gt; headers) {
         return sendRequest(url, method, null, xml , headers);
+
         return send[[R]]equest(url, method, null, xml , headers);
 
     }
 
     }
 
      
 
      
 
     /**
 
     /**
       * Webサービスにリクエストを送信する
+
       * [[Webサービス]]にリクエストを送信する
 
       *  
 
       *  
 
       * @param url
 
       * @param url
80行目: 80行目:
 
       * @return
 
       * @return
 
       */
 
       */
     protected static Response sendRequest(
+
     protected static [[R]]esponse send[[R]]equest(
 
             String url,  
 
             String url,  
 
             String method,  
 
             String method,  
             Map<String, String> parameters,  
+
             Map&lt;String, String&gt; parameters,  
 
             String xml,
 
             String xml,
             Map<String, List<String>> headers) {
+
             Map&lt;String, List&lt;String&gt;&gt; headers) {
 
          
 
          
 
         if (url == null) {
 
         if (url == null) {
91行目: 91行目:
 
         }
 
         }
 
   
 
   
         boolean isGetRequst = ("GET".equalsIgnoreCase(method));
+
         boolean isGet[[R]]equst = ("GET".equalsIgnoreCase(method));
         boolean isXmlRequest = StringUtils.isNotBlank(xml);
+
         boolean isXml[[R]]equest = StringUtils.isNotBlank(xml);
         boolean hasWriteTarget = (isXmlRequest || (!isGetRequst && (parameters!=null && parameters.size() > 0)));
+
         boolean hasWriteTarget = (isXml[[R]]equest || (!isGet[[R]]equst && (parameters!=null && parameters.size() &gt; 0)));
 
         String writeTarget = null;
 
         String writeTarget = null;
 
   
 
   
 
         try {
 
         try {
             URL _url = null;
+
             U[[R]]L _url = null;
 
   
 
   
 
             // パラメータ文字列を生成する
 
             // パラメータ文字列を生成する
104行目: 104行目:
 
             // 出力対象
 
             // 出力対象
 
             if (hasWriteTarget) {
 
             if (hasWriteTarget) {
                 if (isXmlRequest) {
+
                 if (isXml[[R]]equest) {
 
                     writeTarget = xml;
 
                     writeTarget = xml;
 
                 } else {
 
                 } else {
111行目: 111行目:
 
             }
 
             }
 
              
 
              
             // GET の場合、クエリにパラメータ結合しURLを生成
+
             // GET の場合、クエリにパラメータ結合しU[[R]]Lを生成
             if (isGetRequst && StringUtils.isNotBlank(parmString)) {
+
             if (isGet[[R]]equst && StringUtils.isNotBlank(parmString)) {
 
                 boolean hasQuery = (url.lastIndexOf('?') != -1);
 
                 boolean hasQuery = (url.lastIndexOf('?') != -1);
 
                 String sep = (hasQuery)?"&":"?";
 
                 String sep = (hasQuery)?"&":"?";
 
                 url = url + sep + parmString;
 
                 url = url + sep + parmString;
 
             }
 
             }
             _url = new URL(url);
+
             _url = new U[[R]]L(url);
 
   
 
   
             HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
+
             HttpU[[R]]LConnection conn = (HttpU[[R]]LConnection) _url.openConnection();
             conn.setRequestMethod(method.toString());
+
             conn.set[[R]]equestMethod(method.toString());
 
             // リダイレクトを無効にする
 
             // リダイレクトを無効にする
             conn.setInstanceFollowRedirects(false);
+
             conn.setInstanceFollow[[R]]edirects(false);
 
             if (writeTarget != null) {
 
             if (writeTarget != null) {
 
                 // コネクションへの書き込みを有効化
 
                 // コネクションへの書き込みを有効化
 
                 conn.setDoOutput(true);
 
                 conn.setDoOutput(true);
 
                 String size = String.valueOf(writeTarget.getBytes("UTF-8").length);
 
                 String size = String.valueOf(writeTarget.getBytes("UTF-8").length);
                 conn.setRequestProperty("Content-Length", size);
+
                 conn.set[[R]]equestProperty("Content-Length", size);
 
             }
 
             }
 
              
 
              
 
             if (headers == null) {
 
             if (headers == null) {
 
                 // ヘッダが渡されない場合、デフォルトの値を設定
 
                 // ヘッダが渡されない場合、デフォルトの値を設定
                 conn.setRequestProperty("Accept-Language","ja;q=0.7,en;q=0.3");
+
                 conn.set[[R]]equestProperty("Accept-Language","ja;q=0.7,en;q=0.3");
                 conn.setRequestProperty("If-Modified-Since","Thu, 01 Jun 1970 00:00:00 GMT");
+
                 conn.set[[R]]equestProperty("If-Modified-Since","Thu, 01 Jun 1970 00:00:00 GMT");
                 conn.setRequestProperty("Connection","Keep-Alive");
+
                 conn.set[[R]]equestProperty("Connection","Keep-Alive");
                 conn.setRequestProperty("Cache-Control","no-cache");
+
                 conn.set[[R]]equestProperty("Cache-Control","no-cache");
 
   
 
   
                 if (isXmlRequest) {
+
                 if (isXml[[R]]equest) {
                     conn.setRequestProperty("Content-Type","application/xml;charset=UTF-8");
+
                     conn.set[[R]]equestProperty("Content-Type","application/xml;charset=UTF-8");
 
                 } else if  
 
                 } else if  
 
                     ("POST".equalsIgnoreCase(method)) {
 
                     ("POST".equalsIgnoreCase(method)) {
                     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+
                     conn.set[[R]]equestProperty("Content-Type", "application/x-www-form-urlencoded");
 
                 }
 
                 }
 
             } else {
 
             } else {
147行目: 147行目:
 
                 for (String key: headers.keySet()) {
 
                 for (String key: headers.keySet()) {
 
                     String value = StringUtils.join(headers.get(key),",");
 
                     String value = StringUtils.join(headers.get(key),",");
                     conn.setRequestProperty(key, value);
+
                     conn.set[[R]]equestProperty(key, value);
 
                 }
 
                 }
 
             }
 
             }
155行目: 155行目:
 
   
 
   
 
             // 結果の生成
 
             // 結果の生成
             Response response = new Response();
+
             [[R]]esponse response = new [[R]]esponse();
 
              
 
              
 
             // レスポンスヘッダーを設定
 
             // レスポンスヘッダーを設定
             response.setResponseHeaders(conn.getHeaderFields());
+
             response.setResponse[[Header]]s(conn.get[[Header]]Fields());
 
   
 
   
 
              
 
              
169行目: 169行目:
 
              
 
              
 
             // 結果を受ける
 
             // 結果を受ける
             BufferedReader reader  
+
             Buffered[[R]]eader reader  
                 = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
+
                 = new Buffered[[R]]eader(new InputStream[[R]]eader(conn.getInputStream(), "UTF-8"));
 
              
 
              
 
             StringBuilder buf = new StringBuilder();
 
             StringBuilder buf = new StringBuilder();
195行目: 195行目:
 
       * @throws UnsupportedEncodingException
 
       * @throws UnsupportedEncodingException
 
       */
 
       */
     public static String makeParmString(Map<String, String> parameters) throws UnsupportedEncodingException {
+
     public static String makeParmString(Map&lt;String, String&gt; parameters) throws UnsupportedEncodingException {
         if (parameters != null && parameters.size() > 0) {
+
         if (parameters != null && parameters.size() &gt; 0) {
 
             StringBuilder buf = new StringBuilder();
 
             StringBuilder buf = new StringBuilder();
 
              
 
              
203行目: 203行目:
 
             for (String key : parameters.keySet()){
 
             for (String key : parameters.keySet()){
 
                 buf.append(((isFirst)?"":amp));
 
                 buf.append(((isFirst)?"":amp));
                 buf.append(key + "="  + URLEncoder.encode(parameters.get(key), "utf-8") );
+
                 buf.append(key + "="  + U[[R]]LEncoder.encode(parameters.get(key), "utf-8") );
 
                 isFirst = false;
 
                 isFirst = false;
 
             }
 
             }
211行目: 211行目:
 
     }
 
     }
 
     /**
 
     /**
       * Webサービスクライアントのレスポンス
+
       * [[Webサービス]]クライアントのレスポンス
 
       */
 
       */
     public static class Response {
+
     public static class [[R]]esponse {
         private Map<String,List<String>> responseHeaders;
+
         private Map&lt;String,List&lt;String&gt;&gt; response[[Header]]s;
 
         private String body;
 
         private String body;
         public Map<String, List<String>> getResponseHeaders() {
+
         public Map&lt;String, List&lt;String&gt;&gt; getResponse[[Header]]s() {
             return responseHeaders;
+
             return response[[Header]]s;
 
         }
 
         }
         public void setResponseHeaders(Map<String, List<String>> responseHeaders) {
+
         public void setResponse[[Header]]s(Map&lt;String, List&lt;String&gt;&gt; response[[Header]]s) {
             this.responseHeaders = responseHeaders;
+
             this.response[[Header]]s = response[[Header]]s;
 
         }
 
         }
 
         public String getBody() {
 
         public String getBody() {
229行目: 229行目:
 
         }
 
         }
 
         /**
 
         /**
           * HTTPレスポンスの結果ステータスコードを取得
+
           * [[HTTP]]レスポンスの結果ステータスコードを取得
 
           * @return
 
           * @return
 
           */
 
           */
 
         public int getStatusCode() {
 
         public int getStatusCode() {
 
             try {
 
             try {
                 List<String> statusLines = responseHeaders.get(null);
+
                 List&lt;String&gt; statusLines = response[[Header]]s.get(null);
 
                 String statusLine = statusLines.get(0);
 
                 String statusLine = statusLines.get(0);
 
                 String[] strStatus = statusLine.split(" ");
 
                 String[] strStatus = statusLine.split(" ");

2020年2月16日 (日) 04:27時点における最新版

Java 簡易Httpクライアント

Java |

Jakarta commons HttpClient


SimpleHttpクライアント

<blockquote>上記が使えない状況があったので、HttpURLConnectionを利用して簡易版を自作</blockquote>

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.PrintWriter;
  4. import java.io.UnsupportedEncodingException;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.net.URLEncoder;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import org.apache.commons.lang.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.stereotype.Service;
  15.  
  16. /**
  17. * Webサービス利用クライアント
  18. */
  19. public class ServiceClient {
  20. /**
  21. * Webサービスに、HTTP GET リクエストを送信し、結果を取得する
  22. * @param url
  23. * @param headers
  24. * @return
  25. */
  26. public static Response sendGetRequest(String url, Map<String, List<String>> headers) {
  27. return sendRequest(url, "GET", null, null, headers);
  28. }
  29. /**
  30. * Webサービスに、HTTP GET リクエストを送信し、結果を取得する
  31. * @param url
  32. * @param parameters
  33. * @param headers
  34. * @return
  35. */
  36. public static Response sendGetRequest(String url, Map<String, String> parameters, Map<String, List<String>> headers) {
  37. return sendRequest(url, "GET", parameters, null, headers);
  38. }
  39. /**
  40. * Webサービスに、HTTP POST リクエストを送信し、結果を取得する
  41. * @param url
  42. * @param parameters
  43. * @param headers
  44. * @return
  45. */
  46. public static Response sendPostRequest(String url, Map<String, String> parameters , Map<String, List<String>> headers) {
  47. return sendRequest(url, "POST", parameters, null, headers);
  48. }
  49. /**
  50. * Webサービスに、XMLを伴ったリクエストを送信し、結果を取得する
  51. * @param url
  52. * @param method
  53. * @param xml
  54. * @param headers
  55. * @return
  56. */
  57. public static Response sendRequestWithXml(String url, HttpMethod method, String xml, Map<String, List<String>> headers) {
  58. return sendRequest(url, method, null, xml , headers);
  59. }
  60. /**
  61. * Webサービスにリクエストを送信する
  62. *
  63. * @param url
  64. * @param method
  65. * @param parameters
  66. * @param xml
  67. * @param headers
  68. * @return
  69. */
  70. protected static Response sendRequest(
  71. String url,
  72. String method,
  73. Map<String, String> parameters,
  74. String xml,
  75. Map<String, List<String>> headers) {
  76. if (url == null) {
  77. throw new IllegalArgumentException();
  78. }
  79.  
  80. boolean isGetRequst = ("GET".equalsIgnoreCase(method));
  81. boolean isXmlRequest = StringUtils.isNotBlank(xml);
  82. boolean hasWriteTarget = (isXmlRequest || (!isGetRequst && (parameters!=null && parameters.size() > 0)));
  83. String writeTarget = null;
  84.  
  85. try {
  86. URL _url = null;
  87.  
  88. // パラメータ文字列を生成する
  89. String parmString = makeParmString(parameters);
  90.  
  91. // 出力対象
  92. if (hasWriteTarget) {
  93. if (isXmlRequest) {
  94. writeTarget = xml;
  95. } else {
  96. writeTarget = parmString;
  97. }
  98. }
  99. // GET の場合、クエリにパラメータ結合しURLを生成
  100. if (isGetRequst && StringUtils.isNotBlank(parmString)) {
  101. boolean hasQuery = (url.lastIndexOf('?') != -1);
  102. String sep = (hasQuery)?"&":"?";
  103. url = url + sep + parmString;
  104. }
  105. _url = new URL(url);
  106.  
  107. HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
  108. conn.setRequestMethod(method.toString());
  109. // リダイレクトを無効にする
  110. conn.setInstanceFollowRedirects(false);
  111. if (writeTarget != null) {
  112. // コネクションへの書き込みを有効化
  113. conn.setDoOutput(true);
  114. String size = String.valueOf(writeTarget.getBytes("UTF-8").length);
  115. conn.setRequestProperty("Content-Length", size);
  116. }
  117. if (headers == null) {
  118. // ヘッダが渡されない場合、デフォルトの値を設定
  119. conn.setRequestProperty("Accept-Language","ja;q=0.7,en;q=0.3");
  120. conn.setRequestProperty("If-Modified-Since","Thu, 01 Jun 1970 00:00:00 GMT");
  121. conn.setRequestProperty("Connection","Keep-Alive");
  122. conn.setRequestProperty("Cache-Control","no-cache");
  123.  
  124. if (isXmlRequest) {
  125. conn.setRequestProperty("Content-Type","application/xml;charset=UTF-8");
  126. } else if
  127. ("POST".equalsIgnoreCase(method)) {
  128. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  129. }
  130. } else {
  131. // ヘッダが渡された場合、値を転記
  132. for (String key: headers.keySet()) {
  133. String value = StringUtils.join(headers.get(key),",");
  134. conn.setRequestProperty(key, value);
  135. }
  136. }
  137. // コネクションを開く
  138. conn.connect();
  139.  
  140. // 結果の生成
  141. Response response = new Response();
  142. // レスポンスヘッダーを設定
  143. response.setResponseHeaders(conn.getHeaderFields());
  144.  
  145. // 出力の書き込み
  146. if (writeTarget != null) {
  147. PrintWriter printWriter = new PrintWriter(conn.getOutputStream());
  148. printWriter.print(writeTarget);
  149. printWriter.close();
  150. }
  151. // 結果を受ける
  152. BufferedReader reader
  153. = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
  154. StringBuilder buf = new StringBuilder();
  155. String line = null;
  156. while((line = reader.readLine())!=null) {
  157. buf.append(line);
  158. }
  159. reader.close();
  160. response.setBody(buf.toString());
  161. return response;
  162. } catch (Exception e) {
  163. e.printStackTrace();
  164. throw new IllegalStateException(e);
  165. }
  166. }
  167. /**
  168. * パラメータ文字列を生成する
  169. * @param parameters
  170. * @return
  171. * @throws UnsupportedEncodingException
  172. */
  173. public static String makeParmString(Map<String, String> parameters) throws UnsupportedEncodingException {
  174. if (parameters != null && parameters.size() > 0) {
  175. StringBuilder buf = new StringBuilder();
  176. String amp = "&";
  177. boolean isFirst = true;
  178. for (String key : parameters.keySet()){
  179. buf.append(((isFirst)?"":amp));
  180. buf.append(key + "=" + URLEncoder.encode(parameters.get(key), "utf-8") );
  181. isFirst = false;
  182. }
  183. return buf.toString();
  184. }
  185. return "";
  186. }
  187. /**
  188. * Webサービスクライアントのレスポンス
  189. */
  190. public static class Response {
  191. private Map<String,List<String>> responseHeaders;
  192. private String body;
  193. public Map<String, List<String>> getResponseHeaders() {
  194. return responseHeaders;
  195. }
  196. public void setResponseHeaders(Map<String, List<String>> responseHeaders) {
  197. this.responseHeaders = responseHeaders;
  198. }
  199. public String getBody() {
  200. return body;
  201. }
  202. public void setBody(String body) {
  203. this.body = body;
  204. }
  205. /**
  206. * HTTPレスポンスの結果ステータスコードを取得
  207. * @return
  208. */
  209. public int getStatusCode() {
  210. try {
  211. List<String> statusLines = responseHeaders.get(null);
  212. String statusLine = statusLines.get(0);
  213. String[] strStatus = statusLine.split(" ");
  214. int status = Integer.parseInt(strStatus[1]);
  215. return status;
  216. } catch (Exception e) {
  217. throw new IllegalStateException(e);
  218. }
  219. }
  220. }
  221. }