Ⅰ java怎样获取http请求的body
读取Body使用request.getReader(),但getReader获取的是,需要把它转换成字符串,下面是转换的方法
public class TestController {
@RequestMapping("/a")
protected void doPost(HttpServletRequest request,
HttpServletResponse response, BufferedReader br)
throws ServletException, IOException {
//Header部分
System.out.print(request.getHeaderNames());
Enumeration<?> enum1 = request.getHeaderNames();
while (enum1.hasMoreElements()) {
String key = (String) enum1.nextElement();
String value = request.getHeader(key);
System.out.println(key + "\t" + value);
}
//body部分
String inputLine;
String str = "";
try {
while ((inputLine = br.readLine()) != null) {
str += inputLine;
}
br.close();
} catch (IOException e) {
System.out.println("IOException: " + e);
}
System.out.println("str:" + str);
}
Ⅱ javacurlhttp请求时间细节,怎么实现
以下代码是Java实现Http的Post、Get、代理访问请求,可以参考一下
packagecom.snowfigure.kits.net;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.UnsupportedEncodingException;
importjava.net.HttpURLConnection;
importjava.net.InetSocketAddress;
importjava.net.Proxy;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.List;
importjava.util.Map;
/**
*Http请求工具类
*@authorsnowfigure
*@since2014-8-2413:30:56
*@versionv1.0.1
*/
publicclassHttpRequestUtil{
staticbooleanproxySet=false;
staticStringproxyHost="127.0.0.1";
staticintproxyPort=8087;
/**
*编码
*@paramsource
*@return
*/
publicstaticStringurlEncode(Stringsource,Stringencode){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,encode);
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
return"0";
}
returnresult;
}
(Stringsource){
Stringresult=source;
try{
result=java.net.URLEncoder.encode(source,"GBK");
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
return"0";
}
returnresult;
}
/**
*发起http请求获取返回结果
*@paramreq_url请求地址
*@return
*/
publicstaticStringhttpRequest(Stringreq_url){
StringBufferbuffer=newStringBuffer();
try{
URLurl=newURL(req_url);
HttpURLConnectionhttpUrlConn=(HttpURLConnection)url.openConnection();
httpUrlConn.setDoOutput(false);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.connect();
//将返回的输入流转换成字符串
InputStreaminputStream=httpUrlConn.getInputStream();
=newInputStreamReader(inputStream,"utf-8");
BufferedReaderbufferedReader=newBufferedReader(inputStreamReader);
Stringstr=null;
while((str=bufferedReader.readLine())!=null){
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
//释放资源
inputStream.close();
inputStream=null;
httpUrlConn.disconnect();
}catch(Exceptione){
System.out.println(e.getStackTrace());
}
returnbuffer.toString();
}
/**
*发送http请求取得返回的输入流
*@paramrequestUrl请求地址
*@returnInputStream
*/
(StringrequestUrl){
InputStreaminputStream=null;
try{
URLurl=newURL(requestUrl);
HttpURLConnectionhttpUrlConn=(HttpURLConnection)url.openConnection();
httpUrlConn.setDoInput(true);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.connect();
//获得返回的输入流
inputStream=httpUrlConn.getInputStream();
}catch(Exceptione){
e.printStackTrace();
}
returninputStream;
}
/**
*向指定URL发送GET方法的请求
*
*@paramurl
*发送请求的URL
*@paramparam
*请求参数,请求参数应该是name1=value1&name2=value2的形式。
*@returnURL所代表远程资源的响应结果
*/
publicstaticStringsendGet(Stringurl,Stringparam){
Stringresult="";
BufferedReaderin=null;
try{
StringurlNameString=url+"?"+param;
URLrealUrl=newURL(urlNameString);
//打开和URL之间的连接
URLConnectionconnection=realUrl.openConnection();
//设置通用的请求属性
connection.setRequestProperty("accept","*/*");
connection.setRequestProperty("connection","Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
//建立实际的连接
connection.connect();
//获取所有响应头字段
Map<String,List<String>>map=connection.getHeaderFields();
//遍历所有的响应头字段
for(Stringkey:map.keySet()){
System.out.println(key+"--->"+map.get(key));
}
//定义BufferedReader输入流来读取URL的响应
in=newBufferedReader(newInputStreamReader(
connection.getInputStream()));
Stringline;
while((line=in.readLine())!=null){
result+=line;
}
}catch(Exceptione){
System.out.println("发送GET请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输入流
finally{
try{
if(in!=null){
in.close();
}
}catch(Exceptione2){
e2.printStackTrace();
}
}
returnresult;
}
/**
*向指定URL发送POST方法的请求
*
*@paramurl
*发送请求的URL
*@paramparam
*请求参数,请求参数应该是name1=value1&name2=value2的形式。
*@paramisproxy
*是否使用代理模式
*@return所代表远程资源的响应结果
*/
publicstaticStringsendPost(Stringurl,Stringparam,booleanisproxy){
OutputStreamWriterout=null;
BufferedReaderin=null;
Stringresult="";
try{
URLrealUrl=newURL(url);
HttpURLConnectionconn=null;
if(isproxy){//使用代理模式
@SuppressWarnings("static-access")
Proxyproxy=newProxy(Proxy.Type.DIRECT.HTTP,newInetSocketAddress(proxyHost,proxyPort));
conn=(HttpURLConnection)realUrl.openConnection(proxy);
}else{
conn=(HttpURLConnection)realUrl.openConnection();
}
//打开和URL之间的连接
//发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");//POST方法
//设置通用的请求属性
conn.setRequestProperty("accept","*/*");
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.connect();
//获取URLConnection对象对应的输出流
out=newOutputStreamWriter(conn.getOutputStream(),"UTF-8");
//发送请求参数
out.write(param);
//flush输出流的缓冲
out.flush();
//定义BufferedReader输入流来读取URL的响应
in=newBufferedReader(
newInputStreamReader(conn.getInputStream()));
Stringline;
while((line=in.readLine())!=null){
result+=line;
}
}catch(Exceptione){
System.out.println("发送POST请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOExceptionex){
ex.printStackTrace();
}
}
returnresult;
}
publicstaticvoidmain(String[]args){
//demo:代理访问
Stringurl="http://api.adf.ly/api.php";
Stringpara="key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";
Stringsr=HttpRequestUtil.sendPost(url,para,true);
System.out.println(sr);
}
}
Ⅲ Java实现一个HTTP基于xml的post请求 如何在struts2 action获取
//用户名校验方法
//这个方法是用XMLHTTPRequest对象进行异步数据交互
var xmlhttp;
function verify(){
//alert(xmlhttp.readyState);
//×××××××××readyState变更0.1.2.3.4
//1.使用dom的方式获取文本框中的值
//是dom中获取元素节点的一种方法一个元素节点对应hrml中的一个标签,如果<input>.value可以获得一个元素节点的value属性值
//注意取值.value;否则前台取不到本想取到的值
var userName = document.getElementById("userName").value;
//2.创建xmlhttpRequest对象
//需要针对不同浏览器建立不同的代码
//Window.XMLHttpRequest尽量放置在window.ActiveXObject之前
if(window.XMLHttpRequest){
//针对firefox,mozillar,opera,safari,ie7,ie8
xmlhttp = new XMLHttpRequest();
//修正mozillar浏览器的bug语句
if (xmlhttp.overrideMimeType){
xmlhttp.overrideMimeType("text/xml");
}
}else if(window.ActiveXObject){
//针对的是ie6,ie5.5,ie5
//两个可以用于创建XMLHTTPRequset对象的控件名称,保存在一个js的数组中
//排在前面的版本较新
var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i = 0;i<activexName.length;i++){
try{
//取出一个控件的名进行创建,如果创建成功就停止循环
//如果创建失败,会抛出异常,然后可以继续循环,继续尝试创建
xmlhttp = new ActiveXObject(activexName[i]);
break;
}catch(e){
}
}
//确认XMLHTTPRequest对象创建成功
}
if (!xmlhttp){
alert("XMLHttpRequest对象创建失败!!");
return;
}else{
alert("xmlhttp");
}
//2.注册回调函数
//注册回调函数时候,只需要函数名,不要加括号
xmlhttp.onreadystatechange = callback;
////3.设置链接信息
////第一个参数表示http的请求方式,支持所有的http请求方式,主要使用个体和post方法
////第二个参数表示请求的url地址,get方式请求的参数也在url中
////第三个参数表示采用异步还是同步交互方式,true表示异步
//xmlhttp.open("GET","AJAXXMLServer?name=" + userName,true);
//post请求方式的代码
xmlhttp.open("POST","AJAXXMLServer",true);
//post方式需要自己设置http请求头
xmlhttp.setRequestHeader("Content-Tpye","application/x-www-form-urlencoded");
//post方式发送数据
xmlhttp.send("name= " + userName);
////4.发送数据,开始和服务器端进行交互
////同步方式下,send这句话在服务器端数据回来后才执行
////异步方式下,send这句话会立即完成执行
////get方式下的要发送数据都已经在url中了。因此不需要在词单独send内容了
//xmlhttp.send(null);
}
//回调函数
function callback(){
//5.接收响应数据
//判断对象的状态是交互完成的即为4
if (xmlhttp.readyState == 4){
//判断http的交互是否成功
if (xmlhttp.status == 200){
//使用responseXML的方式来接受xml数据的dom对象
var domObj = xmlhttp.responseXML;
//<message>是文本信息</message>
//dom利用getElementsByTagName可以根据标签来获取元素节点。返回的是一个数组
var messageNodes = domObj.getElementsByTagName("message");
if (messageNodes.length > 0){
//获取message节点中的文本内容
//注:无效取值用法:::var responseMessage = messageNodes[0].innerHTML;
//首先messaNodes[0]获取的的是message标签所获取的文本信息,即元素节点。
//message标签中的文本在dom中是message标签所对应的元素节点的子节点,firstChild可以获取当前节点的第一个子节点
//通过以下方式就可以获取到文本内容多对应的节点
var textNode = messageNodes[0].firstChild;
//对于文本节点来说,可以通过nodeValue的方式返回文本节点的文本内容
var responseMessage = textNode.nodeValue;
alert("-----------------");
//将数据显示在页面上
//通过dom的方式找到div标签所对应的元素节点
var divNode = document.getElementById("result");
//alert(divNode);
//设置元素节点中的html内容
divNode.innerHTML = responseMessage;
}else{
alert("XML数据格式错误,原始文本内容为"+ xmlhttp.responseText);
}
}else{
alert("出错了!");
}
}
}
这样返回的是一个数据,你看看对你修改成返回文件有没有用