67,513
社区成员
发帖
与我相关
我的任务
分享
conn.setConnectTimeout(30000); //连接超时
conn.setReadTimeout(30000);
public static String sendPost(String url, String param) {
DataOutputStream out = null;
HttpURLConnection conn = null;
DataInputStream is = null;
String result = "";
try {
URL realUrl = new URL(url);
conn = (HttpURLConnection) realUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
out = new DataOutputStream(conn.getOutputStream()); //在这里
out.write(param.getBytes());
out.flush();
int lenght = conn.getContentLength();
byte[] buf = new byte[lenght];
is = new DataInputStream(conn.getInputStream());
is.readFully(buf);
String tmp = new String(buf);
System.out.println("读取字符串:"+ tmp);
result = tmp;
} catch (Exception e) {
System.out.println("POST请求异常" + e);
e.printStackTrace();
} finally {
try {
if (is != null) {
System.out.println("关闭inputStream");
is.close();
}
if (out != null) {
System.out.println("关闭DataOutputStream");
out.close();
}
conn.disconnect();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
public class Test extends HttpServlet {
private static final String userName = "test";
private static final String pwd = "test";
private static final String channelCode = "123456";
private static final String insertType = "00";
private static final String url1 = "http://gmotabeta.g188.net/channelsys/validateInsert";
private static final String url2 = "http://gmotabeta.g188.net/channelsys/packageValidate";
private static final String success = "000000";
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String packageId = request.getParameter("packageId");
System.out.println("接收到的ID:" + packageId);
if (packageId != null) {
String param = postParam(userName, pwd, channelCode, insertType);
String s1 = sendPost(url1, param);
System.out.println("接收:" + s1);
String status = getValue(s1, "status");
String tokenPwd = getValue(s1, "tokenPwd");
System.out.println("status: " + status);
System.out.println("tokenPwd: " + tokenPwd);
if (success.equals(status)) {
System.out.println("成功!");
response.sendRedirect(url2 + "?" + "channelcode=" + channelCode
+ "&tokenPwd=" + tokenPwd + "&packageId=" + packageId);// 重定向
// response.sendRedirect("http://123.125.169.251:8080/testweb2/");
} else if (status == null) {
response.setStatus(403);
System.out.println("status为空异常");
} else {
System.out.println("失败!");
response.sendRedirect("http://221.130.10.212:8080/cmccwap/1.wml");
}
} else {
response.setStatus(404);
System.out.println("非法请求");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
public static String sendPost(String url, String param) {
DataOutputStream out = null;
HttpURLConnection conn = null;
DataInputStream is = null;
String result = "";
try {
URL realUrl = new URL(url);
conn = (HttpURLConnection) realUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
out = new DataOutputStream(conn.getOutputStream());
out.write(param.getBytes());
out.flush();
int lenght = conn.getContentLength();
byte[] buf = new byte[lenght];
is = new DataInputStream(conn.getInputStream());
is.readFully(buf);
String tmp = new String(buf);
System.out.println("读取字符串:"+ tmp);
result = tmp;
} catch (Exception e) {
System.out.println("POST请求异常" + e);
e.printStackTrace();
} finally {
try {
if (is != null) {
System.out.println("关闭inputStream");
is.close();
}
if (out != null) {
System.out.println("关闭DataOutputStream");
out.close();
}
conn.disconnect();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
public static String inputStream2String(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
}
return baos.toString();
}
public static String postParam(String userName, String pwd,
String channelCode, String insertType) {
String request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n"
+ "<request>" + "\n" + "<userName>" + userName + "</userName>"
+ "\n" + "<pwd>" + pwd + "</pwd>" + "\n" + "<channelCode>"
+ channelCode + "</channelCode>" + "\n" + "<insertType>"
+ insertType + "</insertType>" + "\n" + "</request>";
return request;
}
public static String getValue(String str, String keyWord) {
String start = "<" + keyWord + ">";
String end = "</" + keyWord + ">";
String value = null;
try {
value = str.substring(str.indexOf(start) + start.length());
value = value.substring(0, value.indexOf(end));
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
}
java.net.SocketException: No buffer space available (maximum connections reached?): connect
java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at cn.eden.test.Test.sendPost(Test.java:150)
at cn.eden.test.Test.doGet(Test.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
while ((i = is.read()) != -1) {
baos.write(i);
}
//改为先读出HTTP流长度,然后ReadFully全部读出来。。
.....
public void test(String param){
URL realUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
out = new DataOutputStream(conn.getOutputStream());
out.write(param.getBytes());
out.flush();
InputStream is = conn.getInputStream();
result = inputStream2String(is);
}
public static String inputStream2String(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
}
return baos.toString();
}