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

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Java 簡易Httpクライアント]]==
[[Java]] |
===Jakarta commons HttpClient===
===SimpleHttpクライアント===
<blockquote>上記が使えない状況があったので、HttpURLConnectionを利用して簡易版を自作上記が使えない状況があったので、HttpU[[R]]LConnectionを利用して簡易版を自作</blockquote> import java.io.BufferedReaderBuffered[[R]]eader; import java.io.InputStreamReaderInputStream[[R]]eader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnectionHttpU[[R]]LConnection; import java.net.URLU[[R]]L; import java.net.URLEncoderU[[R]]LEncoder;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.ServiceSer[[vi]]ce;
/**
* Webサービス利用クライアント[[Webサービス]]利用クライアント
*/
public class ServiceClient Ser[[vi]]ceClient {
/**
* Webサービスに、HTTP [[Webサービス]]に、HTTP GET リクエストを送信し、結果を取得する
* @param url
* @param headers
* @return
*/
public static Response sendGetRequest[[R]]esponse sendGet[[R]]equest(String url, Map<String, List<String>> headers) { return sendRequestsend[[R]]equest(url, "GET", null, null, headers);
}
/**
* Webサービスに、HTTP [[Webサービス]]に、HTTP GET リクエストを送信し、結果を取得する
* @param url
* @param parameters
* @return
*/
public static Response sendGetRequest[[R]]esponse sendGet[[R]]equest(String url, Map<String, String> parameters, Map<String, List<String>> headers) { return sendRequestsend[[R]]equest(url, "GET", parameters, null, headers);
}
/**
* Webサービスに、HTTP [[Webサービス]]に、HTTP POST リクエストを送信し、結果を取得する
* @param url
* @param parameters
* @return
*/
public static Response sendPostRequest[[R]]esponse sendPost[[R]]equest(String url, Map<String, String> parameters , Map<String, List<String>> headers) { return sendRequestsend[[R]]equest(url, "POST", parameters, null, headers);
}
/**
* Webサービスに、XMLを伴ったリクエストを送信し、結果を取得する[[Webサービス]]に、XMLを伴ったリクエストを送信し、結果を取得する
* @param url
* @param method
* @return
*/
public static Response sendRequestWithXml[[R]]esponse send[[R]]equestWithXml(String url, HttpMethod method, String xml, Map<String, List<String>> headers) { return sendRequestsend[[R]]equest(url, method, null, xml , headers);
}
/**
* Webサービスにリクエストを送信する[[Webサービス]]にリクエストを送信する
*
* @param url
* @return
*/
protected static Response sendRequest[[R]]esponse send[[R]]equest(
String url,
String method,
}
boolean isGetRequst isGet[[R]]equst = ("GET".equalsIgnoreCase(method)); boolean isXmlRequest isXml[[R]]equest = StringUtils.isNotBlank(xml); boolean hasWriteTarget = (isXmlRequest isXml[[R]]equest || (!isGetRequst isGet[[R]]equst && (parameters!=null && parameters.size() > 0)));
String writeTarget = null;
try {
URL U[[R]]L _url = null;
// パラメータ文字列を生成する
// 出力対象
if (hasWriteTarget) {
if (isXmlRequestisXml[[R]]equest) {
writeTarget = xml;
} else {
}
// GET の場合、クエリにパラメータ結合しURLを生成の場合、クエリにパラメータ結合しU[[R]]Lを生成 if (isGetRequst isGet[[R]]equst && StringUtils.isNotBlank(parmString)) {
boolean hasQuery = (url.lastIndexOf('?') != -1);
String sep = (hasQuery)?"&":"?";
url = url + sep + parmString;
}
_url = new URLU[[R]]L(url);
HttpURLConnection HttpU[[R]]LConnection conn = (HttpURLConnectionHttpU[[R]]LConnection) _url.openConnection(); conn.setRequestMethodset[[R]]equestMethod(method.toString());
// リダイレクトを無効にする
conn.setInstanceFollowRedirectssetInstanceFollow[[R]]edirects(false);
if (writeTarget != null) {
// コネクションへの書き込みを有効化
conn.setDoOutput(true);
String size = String.valueOf(writeTarget.getBytes("UTF-8").length);
conn.setRequestPropertyset[[R]]equestProperty("Content-Length", size);
}
if (headers == null) {
// ヘッダが渡されない場合、デフォルトの値を設定
conn.setRequestPropertyset[[R]]equestProperty("Accept-Language","ja;q=0.7,en;q=0.3"); conn.setRequestPropertyset[[R]]equestProperty("If-Modified-Since","Thu, 01 Jun 1970 00:00:00 GMT"); conn.setRequestPropertyset[[R]]equestProperty("Connection","Keep-Alive"); conn.setRequestPropertyset[[R]]equestProperty("Cache-Control","no-cache");
if (isXmlRequestisXml[[R]]equest) { conn.setRequestPropertyset[[R]]equestProperty("Content-Type","application/xml;charset=UTF-8");
} else if
("POST".equalsIgnoreCase(method)) {
conn.setRequestPropertyset[[R]]equestProperty("Content-Type", "application/x-www-form-urlencoded");
}
} else {
for (String key: headers.keySet()) {
String value = StringUtils.join(headers.get(key),",");
conn.setRequestPropertyset[[R]]equestProperty(key, value);
}
}
// 結果の生成
Response [[R]]esponse response = new Response[[R]]esponse();
// レスポンスヘッダーを設定
response.setResponseHeaderssetResponse[[Header]]s(conn.getHeaderFieldsget[[Header]]Fields());
// 結果を受ける
BufferedReader Buffered[[R]]eader reader = new BufferedReaderBuffered[[R]]eader(new InputStreamReaderInputStream[[R]]eader(conn.getInputStream(), "UTF-8"));
StringBuilder buf = new StringBuilder();
for (String key : parameters.keySet()){
buf.append(((isFirst)?"":amp));
buf.append(key + "=" + URLEncoderU[[R]]LEncoder.encode(parameters.get(key), "utf-8") );
isFirst = false;
}
}
/**
* Webサービスクライアントのレスポンス [[Webサービス]]クライアントのレスポンス
*/
public static class Response [[R]]esponse { private Map<String,List<String>> responseHeadersresponse[[Header]]s;
private String body;
public Map<String, List<String>> getResponseHeadersgetResponse[[Header]]s() { return responseHeadersresponse[[Header]]s;
}
public void setResponseHeaderssetResponse[[Header]]s(Map<String, List<String>> responseHeadersresponse[[Header]]s) { this.responseHeaders response[[Header]]s = responseHeadersresponse[[Header]]s;
}
public String getBody() {
}
/**
* HTTPレスポンスの結果ステータスコードを取得[[HTTP]]レスポンスの結果ステータスコードを取得
* @return
*/
public int getStatusCode() {
try {
List<String> statusLines = responseHeadersresponse[[Header]]s.get(null);
String statusLine = statusLines.get(0);
String[] strStatus = statusLine.split(" ");

案内メニュー