我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种:

1、通过浏览器HTTP调用,返回规范的XML文件内容
      2、通过客户端程序调用,返回结果可自定义格式

接下来,我利用Eclipse作为开发工具,演示一个Httpclient调用WebService的简单示例
      第一种调用见我的另一篇博文:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html
      步骤如下: 
     
     准备工作:用到的jar包有: 下载链接(http://download.csdn.net/detail/lanxuezaipiao/5354480
                  aaarticlea/png;base64,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" alt="" />

第一步:新建Java Project,项目名称为HttpCallWebService

第二步:将所需jar包导入到库中

第三步:编写调用class,这里有两种方式调用,即GET方式和POST方式,由于POST方式较安全,故这里采用POST方式调用;请求数据的构造也有两种方式:静态和动态构造,下面分别介绍这两种方式:

注:这里以E邮宝开放的webservice接口为例调用其中一个API函数,而E邮宝的webservice基于SOAP,故请求数据为SOAP格式,大家可根据自己情况进行修改

静态构造请求数据:

 package com.http;

 import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream; import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity; public class StaticHttpclientCall { /**
* @param args
* @throws IOException
* @throws HttpException
*/
public static void main(String[] args) throws HttpException, IOException {
// TODO Auto-generated method stub String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+ " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
+ " xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
+ " <soap12:Body>"
+ " <GetAPACShippingPackage xmlns=\"http://shippingapi.ebay.cn/\">"
+ " <GetAPACShippingPackageRequest>"
+ " <TrackCode>123</TrackCode>"
+ " <Version>123</Version>"
+ " <APIDevUserID>123</APIDevUserID>"
+ " <APIPassword>123</APIPassword>"
+ " <APISellerUserID>123</APISellerUserID>"
+ " <MessageID>123</MessageID>"
+ " </GetAPACShippingPackageRequest>"
+ " </GetAPACShippingPackage>" + "</soap12:Body>"
+ " </soap12:Envelope>"; System.out.println(soapRequestData); PostMethod postMethod = new PostMethod(
"http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl"); // 然后把Soap请求数据添加到PostMethod中
byte[] b = soapRequestData.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b, 0, b.length);
RequestEntity re = new InputStreamRequestEntity(is, b.length,
"application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re); // 最后生成一个HttpClient对象,并发出postMethod请求
HttpClient httpClient = new HttpClient();
int statusCode = httpClient.executeMethod(postMethod);
if(statusCode == 200) {
System.out.println("调用成功!");
String soapResponseData = postMethod.getResponseBodyAsString();
System.out.println(soapResponseData);
}
else {
System.out.println("调用失败!错误码:" + statusCode);
} } }

动态构造数据:

 package com.http;

 import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity; // 动态构造调用串,灵活性更大
public class DynamicHttpclientCall { private String namespace;
private String methodName;
private String wsdlLocation;
private String soapResponseData; public DynamicHttpclientCall(String namespace, String methodName,
String wsdlLocation) { this.namespace = namespace;
this.methodName = methodName;
this.wsdlLocation = wsdlLocation;
} private int invoke(Map<String, String> patameterMap) throws Exception {
PostMethod postMethod = new PostMethod(wsdlLocation);
String soapRequestData = buildRequestData(patameterMap); byte[] bytes = soapRequestData.getBytes("utf-8");
InputStream inputStream = new ByteArrayInputStream(bytes, 0,
bytes.length);
RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
bytes.length, "application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(requestEntity); HttpClient httpClient = new HttpClient();
int statusCode = httpClient.executeMethod(postMethod);
soapResponseData = postMethod.getResponseBodyAsString(); return statusCode;
} private String buildRequestData(Map<String, String> patameterMap) {
StringBuffer soapRequestData = new StringBuffer();
soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
soapRequestData
.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+ " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
+ " xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">");
soapRequestData.append("<soap12:Body>");
soapRequestData.append("<" + methodName + " xmlns=\"" + namespace
+ "\">");
soapRequestData.append("<" + methodName + "Request>"); Set<String> nameSet = patameterMap.keySet();
for (String name : nameSet) {
soapRequestData.append("<" + name + ">" + patameterMap.get(name)
+ "</" + name + ">");
} soapRequestData.append("</" + methodName + "Request>");
soapRequestData.append("</" + methodName + ">");
soapRequestData.append("</soap12:Body>");
soapRequestData.append("</soap12:Envelope>"); return soapRequestData.toString();
} /**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub DynamicHttpclientCall dynamicHttpclientCall = new DynamicHttpclientCall(
"http://shippingapi.ebay.cn/", "GetAPACShippingPackage",
"http://epacketws.pushauction.net/v3/orderservice.asmx?wsdl"); Map<String, String> patameterMap = new HashMap<String, String>(); patameterMap.put("TrackCode", "123");
patameterMap.put("Version", "123");
patameterMap.put("APIDevUserID", "123");
patameterMap.put("APIPassword", "123");
patameterMap.put("APISellerUserID", "123");
patameterMap.put("MessageID", "123");
patameterMap.put("TrackCode", "123"); String soapRequestData = dynamicHttpclientCall.buildRequestData(patameterMap);
System.out.println(soapRequestData); int statusCode = dynamicHttpclientCall.invoke(patameterMap);
if(statusCode == 200) {
System.out.println("调用成功!");
System.out.println(dynamicHttpclientCall.soapResponseData);
}
else {
System.out.println("调用失败!错误码:" + statusCode);
} } }

最终运行结果:

aaarticlea/png;base64,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" alt="" />

package httpclient;

import java.io.IOException;
import java.net.URLEncoder;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class HttpClientTest {

public static void main(String[] args) throws Exception{
String url = "/webservices/DomesticAirline.asmx/getDomesticAirlinesTime";
String host = "www.webxml.com.cn";
String param = "startCity="+URLEncoder.encode("杭州", "utf-8")+"&lastCity=&theDate=&userID=";
HttpClient httpClient = new HttpClient();
httpClient.getHostConfiguration().setHost(host, 80, "http");

HttpMethod method = getMethod(url, param);
//HttpMethod method = postMethod(url);

httpClient.executeMethod(method);

String response = method.getResponseBodyAsString();
//String response = new String(method.getResponseBodyAsString().getBytes("ISO-8859-1"));
System.out.println(response);
}

private static HttpMethod getMethod(String url,String param) throws IOException{
GetMethod get = new GetMethod(url+"?"+param);
get.releaseConnection();
return get;
}

private static HttpMethod postMethod(String url) throws IOException{
PostMethod post = new PostMethod(url);
post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");
NameValuePair[] param = { new NameValuePair("startCity","杭州"),
new NameValuePair("lastCity","沈阳"),
new NameValuePair("userID",""),
new NameValuePair("theDate","") } ;
post.setRequestBody(param);
post.releaseConnection();
return post;
}
}

如果PostMethod提交的是中文字符,需要加上相应的编码格式: post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");
如果GetMethod提交的参数有中文字符,需要先转换成utf-8格式: URLEncoder.encode("杭州", "utf-8");

1.拳头之Get/Post
拳头是最基本的一重武器,也是最重要的,好比练武之人必须先扎稳马步。

java 代码
 
  1. HttpClient httpclient=new HttpClient();//创建一个客户端,类似打开一个浏览器
  2. GetMethod getMethod=new GetMethod("http://www.blablabla.com");//创建一个get方法,类似在浏览器地址栏中输入一个地址
  3. int statusCode=httpclient.executeMethod(getMethod);//回车——出拳!
  4. System.out.println("response=" + getMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head, cookies等等
  5. getMethod.releaseConnection();//释放,记得收拳哦

2.孔雀翎之支持https

如何支持https?

java 代码
 
  1. static{
  2. Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
  3. Protocol.registerProtocol("https", easyhttps);
  4. }

在执行具体的http method之前,暗中将https协议注册一把,如孔雀翎暗藏玄机,毙敌于无形。记住,官方的binary发行版本没有ssl的contribute包,方法一是下载源代码版本来打造你的孔雀翎。

3.多情环之cookies
常道人老多情,其实是记忆太多,所以情之所至,正如cookies甜心,无论你走到那,总把你牵挂:

java 代码
 
  1. HttpClient httpclient=new HttpClient();
  2. httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);//RFC_2109是支持较普遍的一个,还有其他cookie协议
  3. HttpState initialState = new HttpState();
  4. Cookie cookie=new Cookie();
  5. cookie.setDomain("www.balblabla.com");
  6. cookie.setPath("/");
  7. cookie.setName("多情环");
  8. cookie.setValue("多情即无情");
  9. initialState.addCookie(cookie);
  10. httpclient.setState(initialState);
  11. ...


4.离别钩之解构cookies

多情环的反面即离别钩,钩出,敌之身体某个部件即要与身体别离,端的是无情:

java 代码
 
  1. ...//执行了某些get/post方法后
  2. Cookie[] cookies = httpclient.getState().getCookies();
  3. System.out.println("Present cookies: ");
  4. for (int i = 0; i < cookies.length; i++) {//循环结构零部件
  5. System.out.println(" - " + cookies[i].toExternalForm());
  6. System.out.println(" - domain=" + cookies[i].getDomain());
  7. System.out.println(" - path=" + cookies[i].getPath());
  8. ...
  9. }

5.霸王抢之post参数
枪,长兵器之王,诸多名将均使一杆或金或银命名的名枪,比如岳飞。post方法在提交参数对时,犹如灵蛇出洞:

java 代码
 
  1. PostMethod postMethod = new PostMethod("http://www.saybot.com/postme");
  2. NameValuePair[] postData = new NameValuePair[2];
  3. postData[0] = new NameValuePair("武器", "枪");
  4. postData[1] = new NameValuePair("什么枪", "神枪");
  5. postMethod.addParameters(postData);
  6. ...//出枪吧


6.七星碧玉刀之支持代理(proxy)

代理,非常重要,尤其在局域网横行的年头,没有代理,你在公司上不了QQ,没有代理,google不了网页快照,代理之威,可比七星碧玉刀,无刀,在局域网和开发当中,一切白搭:

java 代码
 
  1. HttpClient httpclient=new HttpClient();
  2. httpClient.getHostConfiguration().setProxy("192.168.0.1", 9527);
  3. httpClient.getParams().setAuthenticationPreemptive(true);//重要!!!告诉httpclient,使用抢先认证,否则你会收到“你没有资格”的恶果
  4. /*
  5. 这一步也至关重要,MyProxyCredentialsProvider实现了org.apache.commons.httpclient.auth.CredentialsProvider接口,
  6. 返回代理的credential(username/password)*/
  7. httpClient.getParams().setParameter(CredentialsProvider.PROVIDER, new MyProxyCredentialsProvider());
  8. httpClient.getState().setProxyCredentials(
  9. new AuthScope("192.168.0.1",
  10. AuthScope.ANY_PORT, //任意端口哦,可要小心
  11. AuthScope.ANY_REALM),//任意域哦,可要小心
  12. new UsernamePasswordCredentials("username",//proxy的用户名
  13. "password"));//proxy的密码

...

最新文章

  1. 菜鸟Python学习笔记第二天:关于Python黑客。
  2. 自动化运维,远程交互从服务器A上ssh到服务器B上,然后执行服务器B上的命令。
  3. this的指向(慢慢添加)
  4. 20款时尚的 WordPress 企业模板【免费主题下载】
  5. oracle生成行方法
  6. Xcode entitlement 问题定位和解决指南
  7. mysql远程连接出现 ERROR 2003 (HY000): Can&#39;t connect to MySQL server on IP
  8. MSSQL 日期操作函数 总结
  9. ABP分层设计
  10. JavaEE(24) - JAAS开发安全的应用
  11. 在kali安装中文输入法的教程
  12. DS控件库 DS按钮多种样式
  13. dsp 28335 ConfigCpuTimer()详细介绍
  14. react中使用antd Table组件滚动加载数据的实现
  15. java 实现简单的顺序队列
  16. ubuntu简单安装apache
  17. pyspider爬取数据存入es--2.测试数据库连通性
  18. logistics回归
  19. Hive(五)数据类型与库表操作以及中文乱码
  20. ldconfig是一个动态链接库管理命令

热门文章

  1. JSON字符串转换为Map
  2. Android menu+ anctionbar
  3. ArcGIS高程Z值的去除方法
  4. android studio中使用adb wifi插件无线调试程序
  5. 设置MAC 下 Vim 语法高亮显示
  6. android 随手记 读写文件的几种方式
  7. Linux文件类型(学习笔记六)
  8. libcurl库进行http通讯-开篇
  9. 解决Swap file &amp;quot;.ceshi.c.swp&amp;quot; already exists!问题
  10. javaweb项目打成war包