package org.nutz.http.sender;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import org.nutz.http.HttpException;
import org.nutz.http.Request;
import org.nutz.http.Response;
import org.nutz.http.Sender;
import org.nutz.lang.Lang;
import org.nutz.lang.Streams;
public class PostSender extends Sender {
public PostSender(Request request) {
super(request);
}
@Override
public Response send() throws HttpException {
try {
openConnection();
InputStream ins = request.getInputStream();
setupRequestHeader();
if (ins != null
&& request.getHeader() != null
&& ins instanceof ByteArrayInputStream
&& this.request.getHeader().get("Content-Length") == null)
conn.addRequestProperty("Content-Length", "" + ins.available());
setupDoInputOutputFlag();
if (null != ins) {
OutputStream ops = Streams.buff(getOutputStream());
Streams.write(ops, ins);
Streams.safeClose(ins);
Streams.safeFlush(ops);
Streams.safeClose(ops);
}
return createResponse(getResponseHeader());
}
catch (Exception e) {
throw new HttpException(request.getUrl().toString(), e);
}
}
@Override
public int getEstimationSize() throws IOException {
if (request.getInputStream() != null) {
return request.getInputStream().available();
} else {
if (null != request.getData()) {
return request.getData().length;
}
try {
return request.getURLEncodedParams().getBytes(request.getEnc()).length;
}
catch (UnsupportedEncodingException e) {
throw Lang.wrapThrow(e);
}
}
}
}