001 package railo.commons.net.http.httpclient4; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.net.MalformedURLException; 006 import java.net.URI; 007 import java.net.URL; 008 009 import org.apache.http.HttpEntity; 010 import org.apache.http.HttpResponse; 011 import org.apache.http.client.methods.HttpUriRequest; 012 import org.apache.http.protocol.ExecutionContext; 013 import org.apache.http.protocol.HttpContext; 014 015 import railo.commons.io.IOUtil; 016 import railo.commons.lang.StringUtil; 017 import railo.commons.net.http.HTTPResponse; 018 import railo.commons.net.http.HTTPResponseSupport; 019 import railo.commons.net.http.Header; 020 021 public class HTTPResponse4Impl extends HTTPResponseSupport implements HTTPResponse { 022 023 HttpResponse rsp; 024 HttpUriRequest req; 025 private URL url; 026 private HttpContext context; 027 028 public HTTPResponse4Impl(URL url,HttpContext context, HttpUriRequest req,HttpResponse rsp) { 029 this.url=url; 030 this.context=context; 031 this.req=req; 032 this.rsp=rsp; 033 } 034 035 @Override 036 public String getContentAsString() throws IOException { 037 return getContentAsString(null); 038 } 039 040 041 @Override 042 public String getContentAsString(String charset) throws IOException { 043 HttpEntity entity = rsp.getEntity(); 044 InputStream is=null; 045 if(StringUtil.isEmpty(charset,true))charset=getCharset(); 046 try{ 047 return IOUtil.toString(is=entity.getContent(), charset); 048 } 049 finally { 050 IOUtil.closeEL(is); 051 } 052 } 053 054 @Override 055 public InputStream getContentAsStream() throws IOException { 056 HttpEntity e = rsp.getEntity(); 057 if(e==null) return null; 058 return e.getContent(); 059 } 060 061 @Override 062 public byte[] getContentAsByteArray() throws IOException { 063 HttpEntity entity = rsp.getEntity(); 064 InputStream is=null; 065 if(entity==null) return new byte[0]; 066 try{ 067 return IOUtil.toBytes(is=entity.getContent()); 068 } 069 finally { 070 IOUtil.closeEL(is); 071 } 072 } 073 074 @Override 075 public Header getLastHeader(String name) { 076 org.apache.http.Header header = rsp.getLastHeader(name); 077 if(header!=null) return new HeaderWrap(header); 078 return null; 079 } 080 081 @Override 082 public Header getLastHeaderIgnoreCase(String name) { 083 return getLastHeaderIgnoreCase(rsp, name); 084 } 085 public static Header getLastHeaderIgnoreCase(HttpResponse rsp,String name) { 086 org.apache.http.Header header = rsp.getLastHeader(name); 087 if(header!=null) return new HeaderWrap(header); 088 089 org.apache.http.Header[] headers = rsp.getAllHeaders(); 090 for(int i=headers.length-1;i>=0;i--){ 091 if(name.equalsIgnoreCase(headers[i].getName())){ 092 return new HeaderWrap(headers[i]); 093 } 094 } 095 return null; 096 } 097 098 @Override 099 public URL getURL() { 100 try { 101 return req.getURI().toURL(); 102 } catch (MalformedURLException e) { 103 return url; 104 } 105 } 106 107 public URL getTargetURL() { 108 URL start = getURL(); 109 110 HttpUriRequest req = (HttpUriRequest) context.getAttribute( 111 ExecutionContext.HTTP_REQUEST); 112 URI uri = req.getURI(); 113 String path=uri.getPath(); 114 String query=uri.getQuery(); 115 if(!StringUtil.isEmpty(query)) path+="?"+query; 116 117 URL _url=start; 118 try { 119 _url = new URL(start.getProtocol(),start.getHost(),start.getPort(),path); 120 } 121 catch (MalformedURLException e) {} 122 123 124 return _url; 125 } 126 127 128 129 130 @Override 131 public int getStatusCode() { 132 return rsp.getStatusLine().getStatusCode(); 133 } 134 135 @Override 136 public String getStatusText() { 137 return rsp.getStatusLine().getReasonPhrase(); 138 } 139 140 @Override 141 public String getProtocolVersion() { 142 return rsp.getStatusLine().getProtocolVersion().toString(); 143 } 144 145 @Override 146 public String getStatusLine() { 147 return rsp.getStatusLine().toString(); 148 } 149 150 @Override 151 public Header[] getAllHeaders() { 152 org.apache.http.Header[] src = rsp.getAllHeaders(); 153 if(src==null) return new Header[0]; 154 Header[] trg=new Header[src.length]; 155 for(int i=0;i<src.length;i++){ 156 trg[i]=new HeaderWrap(src[i]); 157 } 158 return trg; 159 } 160 }