開発環境がプロキシなし, 実行環境がプロキシありの場合、そのままでは動かないので、違う設定する必要ありますが、最小限に済ます方法です。
プロキシの設定は、httpclient, seleniumのconnect, jsoupのconnect, curlのシェル実行とかで多用するので、どこに居ても開発がはかどります。
1) web.xmlに使うか使わないかを設定
<!-- Use proxy or not for curl command -->
<context-param>
<param-name>IsUseProxy</param-name> <param-value>0</param-value>
</context-param>
2) 判別と、使う場合のcurlコマンドに使う引数を、静的設定用クラスに定義
/**
* プロキシ利用フラグ
*/
public static boolean isUseProxy = false;
/**
* curl用プロキシ引数
*/
public static final String ARG_PROXY_CURL = "--proxy http://10.70.1.80:8080";
3) JSPでの利用例
// クレジットバランス用 //
ServletContext cntxt = getServletContext();
String crblcURL = cntxt.getInitParameter("CreditBalanceURL");
crblc.setIsUseProxy(DBini.isUseProxy);
crblc.setUrl(crblcURL);
String crrest = crblc.getCreditBalance();
pageContext.setAttribute("crrest", crrest);
// == ツールバー == //
var htmlds = 'From ' + "${dtpcsumsel}" +
'<span style="margin-left:12px;">' + '${crrest}' + '</span>';
$('#t_pcsum').prepend(htmlds); // 後でリフレッシュボタンを付けてるのでprepend
/**
* curlでクレジットバランス取得
*
* @return 文字列
*/
public String getCreditBalance() {
int res = 0;
String proxy = this.isUseProxy ? DBini.ARG_PROXY_CURL: "";
// コマンド文字列作成 //
String curcmd = "curl -k --connect-timeout 5 " + proxy + " " + url;
System.out.println(curcmd);
String restxt = "";
try {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(curcmd);
InputStream is = p.getInputStream();
// レスポンス取得 //
int nread;
byte[] rbuf = new byte[500];
while ((nread = is.read(rbuf)) > 0) {
}
restxt = new String(rbuf, "US-ASCII");
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println(restxt);
String blctxt = "";
if (restxt != null) {
int crblcstpos = restxt.indexOf("CREDIT_BALANCE=\"");
int lastchgpos = restxt.indexOf("\" LAST_CHARGED");
if (crblcstpos != -1 && lastchgpos != -1) {
blctxt = restxt.substring(crblcstpos + 16, lastchgpos);
}
if (blctxt.indexOf("Connection timed out") > -1) {
blctxt = "TimedOut";
}
if (blctxt.equals("")) {
blctxt = "No Response";
}
return blctxt;
}
// エラー //
else {
return "Error";
}
}
4) Servletでの利用例
// コマンド //
String curlcmd = "curl -k " + (DBini.isUseProxy ? DBini.ARG_PROXY_CURL: "")
+ (isSimple ? DBini.vesselPositionURLSimple : DBini.vesselPositionURL) + imo;
System.out.println(curlcmd);
// 開始時間取得 //
long startTime = System.currentTimeMillis();
VesselPosition vsp = new VesselPosition(DBini.tmNowFmt());
String restxt = "";
try {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(curlcmd);
InputStream is = p.getInputStream();
// レスポンス取得 //
int nread;
byte[] rbuf = new byte[2048];
while ((nread = is.read(rbuf)) > 0) {
}
restxt = new String(rbuf, "US-ASCII");
}
catch (Exception e) {
e.printStackTrace();
vsp.setResmsg(this.FAIL_MESSAFE);
}