java代码发送HTTP Post请求

qianyecq 2010-10-26 03:34:22
下面是实现类

package com.common.action;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import org.apache.log4j.Logger;

public class Test {

Logger log = Logger.getLogger(RecvReportActionTest.class);

private URL url;

public RecvReportActionTest(String url) throws Exception {
this.url = new URL(url);
}

public String sendPostRequest(String content) throws Exception {

log.info("try to open http connection to: '" + this.url.getPath()
+ ":" + this.url.getPort() + "'");
HttpURLConnection conn = (HttpURLConnection) this.url.openConnection();

conn.setConnectTimeout(1000);
conn.setReadTimeout(10000000);
conn.setDoOutput(true);
conn.setRequestMethod("POST");

log.info("try to get output stream");
OutputStream output = conn.getOutputStream();

log.info("try to write '" + content + "'");
output.write(content.getBytes());
output.flush();
output.close();

log.info("try to get input stream");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn
.getInputStream()));
String line;
StringBuffer buffer = new StringBuffer("");

while ((line = reader.readLine()) != null) {
buffer.append(line);
}

String result = buffer.toString();
log.info("get resposne: '" + result + "'");

result = URLDecoder.decode(result, "UTF-8");
return result;
}

public static void main(String[] args){
String url="http://127.0.0.1:8080/TestServlet";

String content="<data><m_name>Obj1</m_name><r_name>qq</r_name><level>2</level><result>0</result><content>test</content></data>";

try {
Test test=new Test(url);

String result=test.sendPostRequest(content);

System.out.println(result);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}




在servlet端

InputStream ins=null;
ins=request.getInputStream();
if(ins==null|| ins.available()<=0){
writeReponse(response,"NO Data");
return null;
}

发现servlet端ins.available()=0
没有接收到数据。
大家帮忙看看,哪里出问题了?
...全文
334 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qianyecq 2010-10-26
谢谢大家的帮忙,结贴。
回复
qianyecq 2010-10-26
[Quote=引用 8 楼 closewbq 的回复:]
serlvet的post方法这么写。

Java code

PrintWriter out = response.getWriter();
InputStream ins=null;

ins=request.getInputStream();
int i=0;
while((i=ins.read())!=-1){……
[/Quote]

谢谢啊,原来是有数据的,只是因为output关闭了导致ins.available()为0,
囧。。。
回复
比特灵 2010-10-26
同3楼,
conn.connect(); 没做
回复
stl0 2010-10-26
[Quote=引用 7 楼 qianyecq 的回复:]
还是没有数据,ins.available()还是为0。
[/Quote]
你可以在你的TestServlet调式一下嘛,看看有没有接到数据

在sendPostRequest发送URL请求之后,想要获取应答,先看看conn.getResponseCode()是不是正常值HttpURLConnection.HTTP_OK
回复
closewbq 2010-10-26
serlvet的post方法这么写。

PrintWriter out = response.getWriter();
InputStream ins=null;

ins=request.getInputStream();
int i=0;
while((i=ins.read())!=-1){
out.write((char)i);
}
out.flush();
out.close();
回复
qianyecq 2010-10-26
[Quote=引用 5 楼 stl0 的回复:]
this.url.openConnection()只不过是创建一个链接,并没有实际的链接操作,

在你输入流设置完成之后,要执行链接操作,就是conn.connect();了

可以放在output.close();之后
[/Quote]
还是没有数据,ins.available()还是为0。
回复
kui506285254 2010-10-26
我来测试测试
回复
stl0 2010-10-26
this.url.openConnection()只不过是创建一个链接,并没有实际的链接操作,

在你输入流设置完成之后,要执行链接操作,就是conn.connect();了

可以放在output.close();之后
回复
qianyecq 2010-10-26
[Quote=引用 3 楼 stl0 的回复:]
Java code
conn.connect();
这个哪里去了??
[/Quote]
this.url.openConnection()这个不是可以了吗,
即使加上了也还是不行,连接是可以的,
问题是数据传不过去。
回复
stl0 2010-10-26
conn.connect();
这个哪里去了??
回复
qianyecq 2010-10-26
[Quote=引用 1 楼 closewbq 的回复:]
String url="http://127.0.0.1:8080/TestServlet";
url不对。
String url="http://127.0.0.1:8080/工程名/servletName";
[/Quote]

哦,不是这个问题,我敲的时候敲少了
可以连接上的,数据没传过去。
回复
closewbq 2010-10-26
String url="http://127.0.0.1:8080/TestServlet";
url不对。
String url="http://127.0.0.1:8080/工程名/servletName";
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-26 03:34
社区公告
暂无公告