티스토리 뷰
HTTP URLConnection에 Timeout을 적용하기 Sample
/* HttpTimeoutURLConnection.java */
import java.net.*;
import java.io.*;
import sun.net.www.http.HttpClient;
// Need to override any function in HttpURLConnection that create a new HttpClient
// and create a HttpTimeoutClient instead. Those functions are
// connect(), getNewClient(), getProxiedClient()
public class HttpTimeoutURLConnection extends
sun.net.www.protocol.http.HttpURLConnection
{
public HttpTimeoutURLConnection(URL u, HttpTimeoutHandler handler, int iSoTimeout)
throws IOException
{
super(u, handler);
HttpTimeoutClient.setSoTimeout(iSoTimeout);
}
public void connect() throws IOException
{
if (connected)
{
return;
}
try
{
if ("http".equals(url.getProtocol())) // && !failedOnce <- PRIVATE
{
// for safety's sake, as reported by KLGroup
synchronized (url)
{
http = HttpTimeoutClient.getNew(url);
}
}
else
{
if (handler instanceof HttpTimeoutHandler)
{
http = new HttpTimeoutClient(super.url,
((HttpTimeoutHandler)handler).getProxy(),
((HttpTimeoutHandler)handler).getProxyPort());
}
else
{
throw new IOException("HttpTimeoutHandler
expected");
}
}
ps = (PrintStream)http.getOutputStream();
}
catch (IOException e)
{
throw e;
}
connected = true;
}
protected HttpClient getNewClient(URL url)
throws IOException
{
HttpTimeoutClient httpTimeoutClient = new HttpTimeoutClient(url, (String)null, -1);
return httpTimeoutClient;
}
protected HttpClient getProxiedClient(URL url, String s, int i)
throws IOException
{
HttpTimeoutClient httpTimeoutClient = new HttpTimeoutClient(url, s, i);
return httpTimeoutClient;
}
}
/* HttpTimeoutHandler.java */
import java.net.*;
import java.io.IOException;
public class HttpTimeoutHandler extends
sun.net.www.protocol.http.Handler
{
private int iSoTimeout=0;
public HttpTimeoutHandler(int iSoTimeout)
{
// Divide the time out by two because two connection attempts are made
// in HttpClient.parseHTTP()
if (iSoTimeout%2!=0)
{
iSoTimeout++;
}
this.iSoTimeout = (iSoTimeout/2);
}
protected java.net.URLConnection openConnection(URL u) throws IOException
{
return new HttpTimeoutURLConnection(u, this, iSoTimeout);
}
protected String getProxy()
{
return proxy;
}
protected int getProxyPort()
{
return proxyPort;
}
}
/* HttpTimeoutFactory.java */
import java.net.*;
public class HttpTimeoutFactory implements URLStreamHandlerFactory
{
private int iSoTimeout=0;
public HttpTimeoutFactory(int iSoTimeout)
{
this.iSoTimeout = iSoTimeout;
}
public URLStreamHandler createURLStreamHandler(String str)
{
return new HttpTimeoutHandler(iSoTimeout);
}
}
/* HttpTimeoutClient.java */
import sun.net.www.http.HttpClient;
import java.net.*;
import sun.net.*;
import sun.net.www.*;
import java.io.*;
public class HttpTimeoutClient extends HttpClient
{
private static int iSoTimeout=0;
public HttpTimeoutClient(URL url, String proxy, int proxyPort) throws IOException
{
super(url, proxy, proxyPort);
}
public HttpTimeoutClient(URL url) throws IOException
{
super(url, null, -1);
}
public static HttpTimeoutClient getNew(URL url)
throws IOException
{
HttpTimeoutClient httpTimeoutClient = (HttpTimeoutClient) kac.get(url);
if (httpTimeoutClient == null)
{
httpTimeoutClient = new HttpTimeoutClient (url); // CTOR called openServer()
}
else
{
httpTimeoutClient.url = url;
}
return httpTimeoutClient;
}
public static void setSoTimeout(int iNewSoTimeout)
{
iSoTimeout=iNewSoTimeout;
}
public static int getSoTimeout()
{
return iSoTimeout;
}
// Override doConnect in NetworkClient
protected Socket doConnect(String s, int i)
throws IOException, UnknownHostException, SocketException
{
Socket socket=super.doConnect(s,i);
// This is the important bit
socket.setSoTimeout(iSoTimeout);
return socket;
}
}
/* Example use */
import java.util.*;
import java.io.*;
import java.net.*;
public class SystemProperty
{
public static void main(String[] args)
{
String sSoapUrl="http://192.168.0.223/mobaqSecurity/SslTunnelServlet";
System.out.println("Connecting to [" + sSoapUrl + "]");
URLConnection urlConnection = null;
URL url=null;
try
{
url = new URL((URL)null, sSoapUrl, new HttpTimeoutHandler(10000));
urlConnection = url.openConnection();
// Optional
url.setURLStreamHandlerFactory(new HttpTimeoutFactory(10000));
System.out.println("Url class ["+urlConnection.getClass().getName()+"]");
}
catch (MalformedURLException mue)
{
System.out.println(">>MalformedURLException<<");
mue.printStackTrace();
}
catch (IOException ioe)
{
System.out.println(">>IOException<<");
ioe.printStackTrace();
}
HttpURLConnection httpConnection = (HttpURLConnection)urlConnection;
System.out.println("Connected to [" + sSoapUrl + "]");
byte[] messageBytes=new byte[10000];
for (int i=0; i<10000; i++)
{
messageBytes[i]=80;
}
try
{
httpConnection.setRequestProperty("Connection", "Close");
httpConnection.setRequestProperty("Content-Length", String.valueOf(messageBytes.length));
httpConnection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
httpConnection.setRequestMethod("POST");
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
}
catch (ProtocolException pe)
{
System.out.println(">>ProtocolException<<");
pe.printStackTrace();
}
OutputStream outputStream=null;
try
{
System.out.println("Getting output stream");
outputStream =httpConnection.getOutputStream();
System.out.println("Got output stream");
outputStream.write(messageBytes);
}
catch (IOException ioe)
{
System.out.println(">>IOException<<");
ioe.printStackTrace();
}
try
{
System.out.println("Getting input stream");
InputStream is=httpConnection.getInputStream();
System.out.println("Got input stream");
byte[] buf = new byte[1000];
int i;
while((i = is.read(buf)) > 0)
{
System.out.println(""+new String(buf));
}
is.close();
}
catch (Exception ie)
{
ie.printStackTrace();
}
}
}
- Total
- Today
- Yesterday
- 생명과학
- 보건
- 다이어트
- 챔픽스 후기
- 금연
- 100일
- 단백질
- 부작용
- 챔픽스
- 챔픽스 후기 금연
- 오라클
- 보건소
- 냄새
- 유전자
- 상식
- 금연일기
- oracle
- 뇌
- 믹스커피
- 통신
- java
- 금단증상
- 과학
- 설탕
- 윈도우10
- DNA
- 인공지능
- 흡연
- 의료
- 지진
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |