`
leiyongping88
  • 浏览: 76830 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpClient发送Post请求,内容格式为xml,并获取响应内容

阅读更多

ChannelDistributor.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<request>
 <userName>yisou</userName>
 <pwd>abcd1234</pwd>
 <channelCode>10010000</channelCode>
 <insertType>00</insertType>
</request>

 

1).HttpClient发送Post请求,内容格式为xml,并获取响应内容

 

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.log4j.Logger;

public class ServiceValidate extends HttpServlet{
 private Logger log = Logger.getLogger(ServiceValidate.class);
 private static final long serialVersionUID = -6995391540735187530L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  this.doPost(req, resp);
 }

    /**
     * 发送xml数据请求到服务器端
     * @param url xml请求数据地址
     * @param xmlString 发送的xml数据流
     * @return null发送失败,否则返回响应内容
     */
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");  
        System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");  
        System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "stdout"); 
       
        String url = "http://localhost:8080/game/testServlet";
       
        String xmlString = getXmlString();
       
        HttpClient client = new HttpClient(); 
        PostMethod myPost = new PostMethod(url); 
        client.getParams().setSoTimeout(300*1000); 
        String responseString = null; 
        try{ 
            myPost.setRequestEntity(new StringRequestEntity(xmlString,"text/xml","utf-8")); 
            int statusCode = client.executeMethod(myPost); 
            if(statusCode == HttpStatus.SC_OK){ 
                BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream()); 
                byte[] bytes = new byte[1024]; 
                ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
                int count = 0; 
                while((count = bis.read(bytes))!= -1){ 
                    bos.write(bytes, 0, count); 
                } 
                byte[] strByte = bos.toByteArray(); 
                responseString = new String(strByte,0,strByte.length,"utf-8"); 
                bos.close(); 
                bis.close(); 
            } 
        }catch (Exception e) { 
         log.error(e.getMessage(), e);
        } 
        myPost.releaseConnection(); 
        client.getHttpConnectionManager().closeIdleConnections(0);
        System.out.println("responseString:"+responseString);
 }

 /**
  * 读取xml内容,将请求的xml
  * 保存成字符串 进行post发送  
  * @return
  */
 private String getXmlString() {
  StringBuilder sb=new StringBuilder();  
        try {  
         InputStream inputStream =ServiceValidate.class.getResourceAsStream("/ChannelDistributor.xml");
            BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));  
            String line="";  
            for(line=br.readLine();line!=null;line=br.readLine()) {  
                sb.append(line+"\n");  
            }  
        } catch (FileNotFoundException e) {  
         log.error(e.getMessage(), e);
        } catch (IOException e) {  
         log.error(e.getMessage(), e); 
        }  
        return sb.toString();  
 }

 @Override
 protected void doPut(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  this.doPost(req, resp);
 }

}

2).获取HttpClient Post请求数据并响应内容

import org.apache.log4j.Logger;

public class TestServlet extends HttpServlet{
 private static final long serialVersionUID = -6175353394519367540L;
 private Logger log = Logger.getLogger(TestServlet.class);

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  this.doPost(req, resp);
 }
 
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  try {
   int len = request.getContentLength();
         System.out.println("数据流长度:" +len);
         //获取HTTP请求的输入流
         InputStream is = request.getInputStream();
         //已HTTP请求输入流建立一个BufferedReader对象
         BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
         //读取HTTP请求内容
         String buffer = null;
         StringBuffer sb = new StringBuffer();
         while ((buffer = br.readLine()) != null) {
         //在页面中显示读取到的请求参数
             sb.append(buffer+"\n");
         }
        System.out.println("接收post发送数据:\n"+sb.toString().trim());
       
        PrintWriter out = response.getWriter();
        StringBuffer stringBuffer = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        stringBuffer.append("<response>");
          stringBuffer.append("<status>800</status>");
          stringBuffer.append("<tokenPwd>jkuiowerncxuidafjkfdaouifdaljkn</tokenPwd>");
        stringBuffer.append("</response>");
        out.write(stringBuffer.toString());
        out.flush();
        out.close();
  } catch (Exception e) {
   log.error(e.getMessage(), e);
  }
 }
}

 

控制台输出如下:

数据流长度:175
接收post发送数据:
<?xml version="1.0" encoding="UTF-8"?>
<request>
 <userName>yisou</userName>
 <pwd>abcd1234</pwd>
 <channelCode>10010000</channelCode>
 <insertType>00</insertType>
</request>
responseString:<?xml version="1.0" encoding="UTF-8"?><response><status>800</status><tokenPwd>jkuiowerncxuidafjkfdaouifdaljkn</tokenPwd></response>

分享到:
评论

相关推荐

    发送Post请求,内容格式为xml,并获取响应内容

    在IT领域,特别是Web开发与服务交互中,发送POST请求并处理XML格式的数据是一项常见的需求。根据提供的文件信息,我们可以深入解析如何使用Java语言通过Apache HttpClient库来实现这一功能。 ### 发送POST请求并...

    使用HttpClient发送POST请求,并获取响应内容(附详细步骤).txt

    ### 使用HttpClient发送POST请求,并获取响应内容 #### 一、简介 在现代软件开发中,尤其是在Web应用领域,客户端与服务器之间的通信是非常重要的环节。Java作为一种广泛应用的编程语言,提供了多种方式来实现这一...

    httpclient post方式发送请求

    接下来,我们将探讨如何使用HTTPClient发送POST请求并附带JSON数据。首先,你需要创建一个`CloseableHttpClient`实例,然后使用`HttpPost`对象来指定请求URL。在POST请求中,我们将使用`EntityBuilder`来构建包含...

    HttpClient发送http请求(post+get)需要的jar包+内符java代码案例+注解详解

    代码中,`HttpGet`类用于创建GET请求,`HttpClients.createDefault()`创建HttpClient实例,`execute`方法执行请求并获取响应,`EntityUtils.toString`方法将响应实体转换为字符串。 三、POST请求的实现 POST请求常...

    HttpClient发送post请求传输json数据

    在这个主题中,我们将专注于如何使用HttpClient发送POST请求并传输JSON数据。在实际的Web服务开发和API调用中,这是一个非常常见的需求。 首先,理解POST请求:与GET请求不同,POST请求通常用于向服务器发送数据,...

    httpclient发送post请求.docx

    这里我们详细探讨一下如何使用`HttpClient`发送POST请求,以及这个过程中的关键知识点。 首先,我们创建一个`CloseableHttpClient`对象,这相当于在编程环境中模拟了一个浏览器。`HttpClients.createDefault()`方法...

    HttpClient模拟get,post请求并发送请求参数(json等)

    在处理响应时,我们通常会检查状态码,然后读取响应内容。例如,你可以使用EntityUtils将响应体转换为字符串: ```java HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString...

    httpClient发送HTTP请求

    以下是一个示例,展示了如何构建XML内容并作为POST请求的一部分: ```java String xmlData = "&lt;request&gt;&lt;param1&gt;value1&lt;/param1&gt;&lt;param2&gt;value2&lt;/param2&gt;&lt;/request&gt;"; HttpPost httpPost = new HttpPost(...

    c# http协议,实现get或post发送请求 并返回内容

    这段代码创建了一个HttpClient实例,发送一个GET请求到指定的URL,然后读取并返回响应的内容。 **POST请求示例:** ```csharp public async Task&lt;string&gt; SendHttpPostRequest(string url, string postData) { ...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    HttpClient是Java中用于执行HTTP请求的一个强大库,它提供了丰富的功能,可以方便地进行GET、POST请求,并且能够处理复杂的网络交互,包括发送文件等操作。下面我们将详细讨论HttpClientUtil工具类如何实现这些功能...

    http post 发送xml数据

    // 处理响应,如获取响应体、状态码等 String responseBody = postMethod.getResponseBodyAsString(); System.out.println("Response: " + responseBody); // 释放连接资源 postMethod.releaseConnection(); ...

    JAVA发送HttpClient请求及接收请求完整代码实例

    如果需要发送POST请求,可以使用`HttpPost`类,并设置请求体。例如,向服务器发送JSON数据: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import ...

    java http 发送xml报文(java发送xml报文实例+参数)

    发送XML报文通常涉及到POST或GET请求,这里以POST请求为例,因为POST更适合发送大量数据,如XML文档。 1. **创建XML文档** 在发送XML之前,我们需要先构建XML文档。可以使用DOM(Document Object Model)或者SAX...

    HttpClient发送json、普通参数类型的Post请求(csdn)————程序.pdf

    本文主要讨论如何使用HttpClient发送JSON格式和普通参数类型的POST请求。首先,我们来看一下所需的Maven依赖。 ```xml &lt;groupId&gt;commons-httpclient &lt;artifactId&gt;commons-httpclient &lt;version&gt;3.1 &lt;groupId&gt;...

    httpclient获取目标网站内容,get、post方式(可运行)

    GET请求的基本流程是创建HttpClient对象,构建HttpGet对象,然后通过HttpClient执行请求并获取响应。以下是一个简单的示例: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); ...

    java中main方法发送httpPost请求

    因为我们是发送POST请求,所以需要设置请求方法为POST: ```java connection.setRequestMethod("POST"); ``` 3. **设置请求属性** 通常,POST请求需要设置Content-Type,表明我们要发送的数据类型: ```...

    httpClient调用webservice接口

    3. **发送请求并获取响应**:使用HttpClient执行HTTP请求,处理返回的响应,并从中提取有用的信息。 #### 四、代码示例分析 以下是对给定示例代码的详细分析: ```java /** * 访问服务 * @param wsdl wsdl地址 ...

    HttpClient工具类

    本文将详细介绍一个基于`HttpClient`的工具类,它能够帮助开发者轻松地发送GET和POST请求,并支持XML及JSON格式的数据传输。 #### 工具类概述 该工具类名为`HttpClientUtil`,位于包`com.taotao.utils`中。主要...

    jdom解析xml java发送post请求

    在这个场景下,我们将探讨如何使用JDOM来解析XML,并通过Java实现POST请求,从而与PHP服务器进行交互,获取或发送远程资源。 首先,理解XML的基本结构至关重要。XML文档由元素、属性、文本内容等组成,这些元素通过...

Global site tag (gtag.js) - Google Analytics