`

HttpClient3.x发送Soap请求的方法

 
阅读更多
public class TestClient {

public static void main(String args[]){
HttpClient httpClient = new HttpClient();

String uri="http://webservice.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx";
PostMethod postMethod = new PostMethod(uri);

HostConfiguration hostconfig = httpClient.getHostConfiguration();
        hostconfig.setProxy("proxy.test.com.cn", 80);
        httpClient.setHostConfiguration(hostconfig);
       
       
        StringBuilder sb=new StringBuilder();
        sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://WebXml.com.cn/\">");
        sb.append("<soapenv:Header/>");
        sb.append("<soapenv:Body>");
        sb.append("<web:getSupportCity>");
        sb.append("<!--Optional:-->");
        sb.append("<web:byProvinceName>山西</web:byProvinceName>");
        sb.append("</web:getSupportCity>");
        sb.append("</soapenv:Body>");
        sb.append("</soapenv:Envelope>");
       
        postMethod.setRequestHeader("SOAPAction", "http://WebXml.com.cn/getSupportCity");
postMethod.setRequestHeader("Content-Type", "text/xml; charset=UTF-8");
       
        StringRequestEntity requestEntity=new StringRequestEntity(sb.toString());
        postMethod.setRequestEntity(requestEntity);

        int returnCode=0;
        try {
    returnCode = httpClient.executeMethod(postMethod);
    System.out.println(postMethod.getResponseBodyAsString());
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

System.out.println("返回状态码:"+returnCode);
}

}



postMethod.setRequestBody("")已经被方法setRequestEntity方法代替了。
头部信息只有Content-Type需要设置,其他不需要设置
SOAPAction头,如果设置必须设置正确的值,不能设置为空;要么不设置。



httpClient获取返回消息是附件的方法:

StringBuilder sb2=new StringBuilder();
sb2.append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-
instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">");

        sb2.append("<soap:Body>");
        sb2.append("<enValidateImage xmlns=\"http://WebXml.com.cn/\">");
        sb2.append("<byString>wanglei</byString>");
        sb2.append("</enValidateImage>");
        sb2.append("</soap:Body>");
        sb2.append("</soap:Envelope>");
       
       
        postMethod.setRequestHeader("SOAPAction",

"http://WebXml.com.cn/enValidateImage");
postMethod.setRequestHeader("Content-Type", "text/xml; charset=UTF

-8");
       
        StringRequestEntity requestEntity=new StringRequestEntity(sb2.toString());
        postMethod.setRequestEntity(requestEntity);

        int returnCode=0;
        try {
         returnCode = httpClient.executeMethod(postMethod);
InputStream in=postMethod.getResponseBodyAsStream();
         byte[] ims=new byte[(int)postMethod.getResponseContentLength()];
         in.read(ims);
         OutputStream out=new FileOutputStream(new File("c:\\longcxm3.gif"));
    out.write(ims);
    in.close();
    out.close();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


postMethod方法获取的返回消息已经没有响应头部了,直接就是附件的二进制流。


使用httpclient3.x和apache的fileuploade控件上传文件的方法(必须在容器里面)

发送请求:
HttpClient httpClient = HttpClientUtil.getInstance();
PostMethod postMethod = null;
File dest = new File(timestampFile, targetFile.getName())
String uri = "http://10.10.10.10:8080/console/centrolServlet"
postMethod = new PostMethod(uri);
Part[] parts = { new FilePart(projectName, dest) };
postMethod.setRequestEntity(new MultipartRequestEntity(parts,postMethod.getParams()));
int status = httpClient.executeMethod(postMethod);


接受请求:
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
File tmp = new File(defaultFile, "tmp");
File uploadFile = new File(tmp, uploadPath);
factory.setRepository(tmp);
List<FileItem> items;
items = upload.parseRequest((HttpServletRequest) request);
Iterator<FileItem> files = items.iterator();

while (files.hasNext())
{
    FileItem fi = (FileItem) files.next();
    String fileName = fi.getName();
    if (fileName != null)
    {
         File fullFile = new File(fi.getName());
         saveFile = new File(uploadFile, fullFile.getName());
         fi.write(saveFile);
     }
}


分享到:
评论
2 楼 yuyangtina 2012-11-09  
哦,知道了,是继承的方法。谢谢你的分享。
1 楼 yuyangtina 2012-11-09  
请教个问题,您说postMethod.setRequestBody("")已经被方法setRequestEntity方法代替了。 我在官方网站下载的jar包commons-httpclient-3.0.1.jar,postMethod类中只有setRequestBody 没看到setRequestEntity这个方法,为什么?

相关推荐

    用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)

    2. **发送SOAP请求**:使用Java的HTTP客户端(如Apache HttpClient或Java自带的URLConnection)将SOAP请求发送到目标服务器。 3. **处理SOAP响应**:服务器收到请求后,根据SOAP消息的内容执行相应的逻辑处理,最后...

    C#Post带参数请求+WebService接口.zip

    - 发送请求:调用`HttpClient`的`PostAsync`方法,传入请求的URL和HttpContent对象。 - 处理响应:`PostAsync`返回一个`Task&lt;HttpResponseMessage&gt;`,可以通过等待这个任务并访问其`Content`属性获取响应内容。 2...

    Java连接Dynamics 365 CRM_DEMO.zip

    3. **构建请求**: - 有了令牌后,你可以构建HTTP请求来访问Dynamics 365 CRM的资源。URL格式通常是`https://[组织名].api.crm.dynamics.com/api/data/v9.x/[实体名]`,其中 `[组织名]` 是你的CRM实例名称,`[实体...

    使用Http post的方式调用webservice

    使用如SAAJ(SOAP with Attachments API for Java)库可以更方便地处理SOAP请求。 6. **避免jar包冲突** 当有jar包冲突时,可以考虑使用类加载器隔离技术,如使用Apache Commons Lang的`ClassUtils`或Spring的`...

    java调用webservice的axis2.jar包

    5. 发送请求和接收响应: Axis2会自动处理SOAP消息的封装和解封装,通过HTTP发送请求并接收响应。 6. 处理响应:解析返回的结果,通常转换为Java对象,供应用进一步处理。 四、关键概念 - ADB绑定:相比于传统的...

    C#调用webservise获取天气预报信息

    `HttpClient.GetAsync`方法用于发送GET请求,`IsSuccessStatusCode`检查响应是否成功,然后`ReadAsStringAsync`读取响应内容。 接下来,我们需要处理返回的数据,这通常是JSON或XML格式。C#提供了`System.Web....

    android socket面试文档

    - **HttpClient3.x与HttpClient4的区别:** - 版本差异:HttpClient4是基于HttpClient3进行改进和优化的新版本。 - 功能增强:支持Multipart/MIME等更多特性,需要额外引入`httpmime.jar`库。 - 使用示例: ```...

    axis2客户端以及服务端所有jar包

    - `httpclient-4.x.x.jar`和`httpcore-4.x.x.jar`: HttpClient库,用于HTTP通信。 3. **Axis2服务端** Axis2服务端库则用于部署和运行Web服务。关键jar包有: - `axis2-adb.jar`和`axis2-adb-codegen.jar`: ADB...

    Apache CXF文件目录结构及需要jar包

    2. **Endpoint**:代表服务的实际网络端点,处理来自客户端的请求并发送响应。 3. **Data Binding**:将Java对象与XML消息进行绑定,例如JAXB用于SOAP,JSON-B用于REST。 4. **Transport**:处理消息的发送和接收,...

    WeatherReport

    以下是一个示例,展示如何使用`HttpClient`发送POST请求获取信息: ```csharp using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue...

    Unity3D网络通讯

    你可以创建SOAP请求,与服务器交换数据,如获取天气预报或执行远程业务逻辑。 5. **WebApi通讯** WebApi是ASP.NET框架的一部分,用于构建RESTful服务。Unity3D可以使用UnityWebRequest或HttpClient(在.NET 4.x...

    C# 网络实例

    2. **HttpClient类**:用于HTTP/HTTPS请求,是C# 4.5及更高版本中常用的方法。HttpClient提供了发送GET、POST等HTTP请求并处理响应的能力,是进行Web API调用和网页数据抓取的重要工具。 3. **FTP(File Transfer ...

    C#网络应用程序集锦

    `HttpClient`是主要的HTTP客户端类,可以发送GET、POST等各种请求,接收JSON或XML格式的响应数据。对于安全的HTTPS通信,`HttpClientHandler`和`SslStream`等类提供了证书验证和加密传输的支持。 5. **Web服务...

    C# 调用WebService查询手机号码归属地

    - 使用HttpClient:如果你不希望添加Web引用,也可以直接使用HttpClient发送POST请求,处理返回的XML或JSON数据。 ```csharp using (var client = new HttpClient()) { var content = new StringContent($...

    网编知识点整理之网络入门

    C#中的HttpClient类可以方便地处理HTTP请求和响应。HTTPS是在HTTP之上增加了SSL/TLS加密,保证了数据传输的安全性。 6. **Web服务与Web API** Web服务(如SOAP)和Web API(如RESTful)允许不同系统间的通信。C#...

    android c# webservice 实现

    常见的WebService规范有SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。 二、C#中创建WebService 1. 使用ASP.NET创建WebService:在Visual Studio中,选择“新建项目”→“ASP...

    C#网络应用编程+第2版

    4. **HTTP与HTTPS**:HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,C#中的HttpClient类可以方便地发送HTTP请求和接收响应。HTTPS(安全套接字层超文本传输协议)是在HTTP基础上加入SSL/TLS加密,以...

    AXIS2实现WebService的jar包

    - 通过SOAP消息直接发送请求,可以使用各种HTTP客户端库,如Apache HttpClient。 - 利用AXIS2生成的客户端存根类,简化调用过程。 7. **AXIS2与JAR文件** 在提供的压缩包文件中,"lib"包包含的是AXIS2运行时所需...

    c#网络应用编程基础-电子教案

    SoapHttpClientProtocol和WebService代理类用于消费SOAP Web服务,而HttpClient类可以方便地调用RESTful API。 六、网络安全与身份验证 C#提供了安全相关的类,如NetworkCredential用于网络认证,X509Certificate2...

Global site tag (gtag.js) - Google Analytics