我们将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,iVBORw0KGgoAAAANSUhEUgAAAOwAAABNCAIAAAAq8R8IAAAIHUlEQVR4nO2dz2/TZhyH8ydw3WHSkFB36KFSD0jzcaepx50AaULawScOU3dB24EdaBfth2YNtvUwOmDApKmBsi7GWAkptKApFaMHVnXyoTnAlHUIKqCJ6zjxDk7s135/2KntvHb9ffQeGtvv69fJE/u1409dsAAg4xR4d8CyLFksiLJlWZokFARJ6/8lyrz7BWSEOCVe+fKoU4apBxIDkYhN4tKpI4yXTAYSu4DEwBCElbhWqxWLRdrclZmjenNOb87tbErN9WJj+fTm4kcrM0fRQm8bJAYiEUriarU6Pj4+NjZGW6AyM6nv/MEolZlJevPocMJW1/5LFgt9QGiAQbDEtsHHjh1jSXxmUm8uMsr8ybfoayBL7Kori6AxwCBAYsfg48ePMyT+/cyk3rjolNL0BKNgtWl7YmcBGF0ALFgSowazJS5Nj+ubkl1K0xN6Y45YmutFkBiIHZbExWJxDGF2dpa25NVTR/TNor5ZLE1P2H/ghWKwRR1ODLT1vAAAjHgusc2ffFNfP12antDXPyMWusEWdU8swnkdEIp4JP7m/TdK0xP6+mliYRoMAFGJ7ceOefFtRolrLQCAk4Z7JwAgEiAxkHlAYiDzgMRA5gGJgcwDEgOZh7/Ey3Tu3LlTrVZ5dxBIO6mQ2Ox0TLPT7ZrdrtnrdXu9rml2er1uvV5XVbVSrfDuI5Bq+Etcq9U6HQP3uNfr3r9/v9VqKYpSq9V4dzMdyGI/wDV63PBY6uAvcbVaNYw9oseqqiqKoiiKqqq8u5kOYpFYFgPuR9EkoYCtByRmUKlUjD397p+b9Y2ttY3G2kaj/tfW2kajvrF179Hf/zx92tjaAon7RJXY1lMUWbe2apIgCKkVlgR/iVVV3dPby2uPTdM0TdMwjBcPfjIMwzTN5bXH9i5ZURTe3UwH8QwnWPdna5IgSBrHYcs+4C+xoih6u3Vr5aGu6+12+7/bX2yvXnzx6Ddd12+tPAyS2M3hDd50dwpyzJTFgiDJkuBMHSyF1GIvwGxZ8i+s9VtiHLdD9tw3He0Q3gJtog+6xLbCxC8LWomweUgscuT685e4XC63W62Suvry5cudnZ1/y7Pb37337Nmz58+fl9RVe3xcLpdJVWXR/455p7jhPOTNtT9lf4Ik1ALUlt2FBUkLk0QZrufoN2awEKqZsz68WSK0/nm2li6xJomDeW7vvLHI0cJT4qmzJbRsb2//uHD70tzXF69cke/Wz10rX7pxu2t2ul1zaWmJUB9/p/1T0E9XQN54/O+gBUK1PNiP9b8HaAVnB0nZ0dHa901H++tFkDSSet71+jvvAZ0asCcm7It5Rsh4Snzo3U/R8uTJE+Ve/fP568X5G5XVtfPXyj9cXTTNjml2bt68SagfSoVwju5HYryiM9F5STm4hu85Q2K84bAjWaJwiJbEQY1TCb12QY1FjhTOw4kPfvkQLb8qq1eWlu3SbDbP/3zdvvRWKpVItdFDrSz1P3PvQZlw8N2XxKFaHpinSZJnpBix596hKGG6JYv42MNulgi+UyXswBFNvWMkZIuR+GOOJS6cnULLt5cXnHLucuns95fsS8gLCwvk+u7uwzNuJJ9+RZI4TMvunjj4/76E7bn3VE3yjYSxpQnNktfqLjSsxEgjyMW6vEr84ON38NLafd3e3W23Wnq7vafrxp5uGHsXLlzg2E/AslL9fxN4Slw+cXjjqym0lE8c3n39yutx29jTJUni2E/ASvUPdnwlnjqEl9evXuEeM/7lBZA4/fFMSnfDFvcxsWVZn4SDdzeB9MJfYgCICEgMZB6QGMg8IDGQefhLDBk7ICKpkBgydkAU+Eucy4xdQjed4w9TSzcx9ZO/xLnM2GVOYucGDuJPHsQbPv3zCTUPjMS5zNgRJfZnJ4b/iQx/mFp4GGvUJKE/h/QMIMREwuwwqb6o8Jc4lxm7bEnsXYOv4556wZmRJOAvcS4zdp5anvUVCgVBcO+XFCSN9VQ/3+bL2IMjaG+Rr8/o2lmHd3J2xNshUgMUiWPK7fGXOLcZO38t6p6Y9lQ/4ub7JKZG8Zhrx9CQrzc+JwaJI+X2IGPHI2NHrsWSGPkkKfG7/lq8EhOjeMFrp56o4d+b2PbEEXJ7kLHjkbEbpcSE9QeunQHWomfCkGPimHJ7kLHjlbEbTmLSC+Lm48MJYhRvGIndixO+0QdW0WnYf+2MkuqLKbcHGTsuGTtyrf7WOJ8vemJHfKqff/NJJ3aEE6bgtVPf5gKuM+lT8CqO4kn1xZTbg4xd+klxui0iMW0ZZOzSz4GVOK4fFiFjl34OosSx5vb4XyeGjB0QEf4SA0BEQGIg84DEQOYBiYHMw19iyNgBEUmFxJCxA6LAX+K8ZuxivfKb8lBdwt3jL3FeM3ZplZiWh4sy98BLnNeMXQp/g2Pn4aLMTRb+Euc1Y5dCiW3Yv3JHmZsU/CXOa8aOfe8oOt37lAPidF8eCesPvTWcBCSOKUtHg7/Eec3YBTfr+diRG5UJ030b4s/P0VojkqjEiTwDDzJ2vDJ2xPgQJXpE7Cb6kpoMJXXeE0vBdtlJ74kjZOloQMaOV8aOJjFTu5glJpKkxNGydDQgY8crY0cZTrCHDaGGE+Qjwz6HEyHTcuy5MWXpaEDGjlfGLujEDkmdUR5fRz+xw48MtNYo76bbm5BpuZFk6WhAxi4L0AYAAQODIVtLjoSvvEHGLp0gMXnPkIM2fX+tjYikfxSHjF1aQY7P2AUM0vT9tZY0sWbpaPC/TgwZOyAi/CUGgIiAxEDm+R/qvD5g3fOWmgAAAABJRU5ErkJggg==" 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,iVBORw0KGgoAAAANSUhEUgAAAsIAAAA2CAIAAABC7GioAAAOwUlEQVR4nO2d26HrKAxFXRcFUQ8lTBU042I8H34JtAXCjvM4d6+fucOxQRKSECSxp6XkP0IIIYQQH9NCCCGEEHIJlhGEEEIIuQjLCEIIIYRchGUEIYQQQi4yWkbkOE3TNMV8ZbDt5qu3v4A5hZeOvveX4zSFNH9tn1flEKb6RtPNKWweNdqDMfot9/5H+HwUKz4vki86kNfl+H6pq9BuNP493qbmB+z5Xl8SPn/pNOLWivJRb331WrjkOE0xL3MKcjXalrf+QHAdxH2+nYfLiBE1DZ/J0WWgY5GRU9IY/eWa3gL5krt8kqq/vAj8GhOt/EJiAV5npf4Hl/o5Be03sPFphH++afBCTRhH/sZmnj8GKl0DVZLiCjwL5+htJ/viMsJ054vz/oUJ6AbbSiaVWps8am5JZVkW0MHHDfX0+ANq4mt8AsrQEnVHc3Tp3u30+rCRoC/NKQivaYbhY3nl084J+EKRFDhdvLmMgNW3syR/inftmaSaMI5gTrYaG3m+sOdx/zHQnEIIR50RYzxrDrSrcZrmEydby7J0ywjrxLm0sAyJzbQhpThN0/afelfb1rWy2zkhoiiTK0NMR/veLK48esInn6DPoss75+2dKRWetkox7AIjwovCH1jpHFpWvnszMp0xULn/HbSeCIPdfoU4e5eqsWG5MkX4BKomz4qCuh15neW0SvSG19m+JPLb0a+8EuUVMNBQxGGR/K5o9qlVu5NY+qMXRq5Mh0a3br/3kUqOU8x7F2L/2vX59VrbbZQzyAHtRjWzOU4hRm8jjC/Yp9PF5RUgjkDyb6Qga5094gjm5Faitg9Ka4VXUU8/CimnmOZlTinLowt/GaFSOvAlaDorjuC5LaTy+UYZgZPnLpI+hD+tXR3clKZxbtNlkAobqQvgx4x2VVaOXu06z8iUdj3KyIJrG2h4xapCGt4OQIMg4dVy09bdyCdgbVUD6e3+kOlAGQFFabUa/TrTPHDvs71aoOuLgNdhI0MdhD3rK01F6z+gMkIl1N7E9SIOjNyNo6LR6lNxK7GYgWAXZCDzZ8M0Cm0Qv88DOd2nEbbb4DICHq4Vjbu+m67rkP5GS0njSr3oIYw4QskfpaCW7nuXR5pXObmZqK1pggmkPgmZU0wpxnzeYE2PNhFI6WZo1xHXjCNbLdNsVhmhsmYhKvRu4bN796fQg2VEmTjOIAFVJgzsSh6ouRZFOCJczIbwlhGoDvaPoA0ChQd9Y93lhf0yojnQsD5Wn0AUs1Usm8X+QWSBjkj2QnHeb0SH9jrTZMXyrqO9us/e8fScE2mDjeyPOC1SP47Mw6XOfNxILFhNOzP0R2/efjlTDPk8LCM6YVKP1vtAY7NqjiGEY4XzN8Jh+1c2ndmaWsO9jRRkZSS1dapycjNRI5ujgSrPqeqpdhlR9NA6WUW+hCLOjCOQl2BSrXXvnEb44y2EoFS4Xkbs94hbDSdopP1N/+LPV8uIge2FW80cq9VuLA1hg3y2jDDXcZ/pHjiNKC5yLLyNbopb7egQXmc7mJ72sTKiUedXsjjLCH/EaZEGyojB4vJGYmluBkBm6I/evL0c4ymfv1tGwGxZN+Y4xTynmHIKMZ+ZwdloD9y80u1tnTLCXPXsDWfZtc7JrUSN9zL1QHMKU0j5HAzafGmWEYd8oJjRIx9yWTUNiCOYlxq4yohdal2B6MPcvcQpNzQ3yoj1plwdtjliQHfTWAulMue/HzuNqJeesnAeHgjeA4VHiw7UvZzDqWE6q9gaPoGohMejw6Bxu3rzYwX7cimWVcLi/orqs2Fk6RHCnvXEIieGmqvaZqCMcEccEKkbR2dPI45+K7H0olhfrj/UKEdv3f760wjPwcHSchutEQxP3TinEGJcP7Y/vvznb4SjN66EiunbjQ81wIJthSQ+IdA1gM7JjUSt5h0MVDrwvmJfKSOq/AwWGO1LIOJwHOG81MBdRizKTnVUyVQ6p7B/1oKivS7RO2LCMFCFJkqUxUDSrmD0s3Y9tLpZRhQHQ1IFvTILoS4tv8Agrc1NLRHQ/bxO7Bmg6bqnER5HNBUKKcXa7ZCovoLUL5BeNNqBLWSAXoeNfLQJNaXlpCsqyzd2uqiMUBfa7u2KuKE40hrhKAbcTSx2PQ2dodIdjT6WWLzY0wGTQ91oGFlr5K1LCuXFYuVvPMWsfAveDmUHqdKII7ixhO6JFnc0cS6zq3HQl4xqzY+7YqpTlygj6j7NlKoTm+FLKuKschzlJYiynXklIaOUhW/rmJLUdI7VfpC/p9EX4jay50jmDwBT0NvU/Hv29MEygryOIoavfE7zD/P3Ft2/p9EXQiOXMAV9ApYR5IUUh108ihjh760Hf0+jL4RGrmAK+gAsIwghhBByEZYRhBBCCLkIywhCCCGEXIRlBCGEEEIuwjKCEEIIIRcxy4h5fYtq8ewL4wE0E/pVTY4xz8ebWNFfX6YDIYQQQj5C6zRinuclpzQvS855nnNK+2O+tn+sfxQNS87nT3aLZ8mJ0iPm886DHPnbHEIIIeTHsMuItTbIKcb1xWIxxaOMME8jxDNDw/5GM1FapO1x4vuf5TNCWUYQQgghP4ZRRhzPAT+W9znH/ROKxmnE9q+c0pzT+hRS+Vz1/Qxivey8rfw3IYQQQn6CxmlEzvOy5LS+3nQKSXyoYZ5G7F+lCGmeU0yp/ArEUUasBxRF6TDPPIwghBBCfotmGZFzTjnPOc9rOVEdQqDvRqT1BWLrmcR2krFWCOerI9N2OU8jCCGEkJ/GLiNynEJKOR+vLdtX+vPrkaqMyCnN++chOW6vms45y+8+zClWVcg6Gr8bQQghhPwYzedGiCOC48sSxRHCPMu3x4tDiYhf9C6+cgF/JUoIIYSQH4KPnyKEEELIRVhGEEIIIeQiLCMIIYQQchGWEYQQQgi5CMsIQgghhFxktIzYni917UcWx3u+PvYbDfG7kpf2d/wE5Uv7vCqHMNU3mk48e32wB2P0W+7903w+NhVfKJIf5GD7C4beLYcaFDb+Pd6m5s2Bfn86Lp1G3FpRPmqzV6+F+09b5xTkarQtb/2B4DqI+3w7D5cRI2oaPlP8mLg9kHoVbWP0l2v6aorX7r66tPsyxb9QJB/Awawy4sGlfk5BhwhsfBrhtG8avFATZlp3Y1v43kDlY5/RTP/6Q5P6ZYTp4xdV/9m8ANlWMqnU2uRRUzxeQ3fwcUM9Pf6Amvgan4Ayd4u6ozm6dO92kH9kkh7b1X7a5QBfKJIPnBneXEbAQttZfT/Fu7ZHUs3z3U5idJh+jZzcEl4OBG9vT+WHp+MldMoI68S5NHvxSo11CQ0pxWmatv/Uu9p2eFRTdZq5etv4/teYjnb9ptFyhnU5CPosurxz3t7JAsJ/VimGs8aI8KKgBlY6hy5K5/MZYsp0xkDlTnnQeiLP7vZTL3DZc3NBw3Jl3vAJVE2eFQV1O/I6y2mV6LbXqWe1oeUI3D4UR0jvEQcz+9Qmu5Mu+qO3TffUHLlYH+ob5e0+916vHfAQOaDdqKY7xynE6G2E+sM+iyt9CwCYDpDnG9nGqtmOhR6m315OBsIb+xRxe1PjSs63+acvtJ05pFFG4OS5364P4c8xqs8Fy/2cc5suV/+jYAHTBT97tLdr5ejVrvMM1+ns6PSEgmsbaHjFqkIaLkqhQZDwxT/7uhtJBqytaiC93R8yHSgjoCitVqNfz5wt0L3P9mopry8CXoeNDHUQ9tSxq8euc2dvOnpxVEljCw/lbPSpuJUuTPfGc+upwG7O0Zh7A+HdpxEDHrL30PlAY5+CzSrrkP5GS0njyrKAsjCmA+V5lG1auu9dlmu7TL92TraEVx9ogNuli1T313I+lUNq/GuHK4cYZYTKmk1FdzvVS0A+zvUGy4gyxZx2kZzuhRcYHNCt1Ul4J1zMhvCWEag49o+gDQKFB31j3eWF/TKiOdCwPlafQBSzVSywxa5AxHZHJLsCPe83okN7nWmyohDQkdlxHiQjNp0/jvS4/egwj4x8G6Er6QKracd7Z+jWAPfmCDHk3rCMGBkdBmDZuJk6xxBCzNv/+hvhsP0rwZ7GVLu5M7SzjZV81C6pSr/9nFwJr+zZvr3OHOqKR/xTZ8WBtcOVQzqnEc5AmVMIISgZrpcR+z3iVsMzGml/M1/x56tlxAOnEat4crUby0rYIJ8tI8x13Ge622WEpriomcC63RS32tEhvM52MD3tj5QR/jjS4w6UEYMl44100SzxQbwbvHCOnnLvu2UETIx1Y45TzHOKKaewvUlxpNEeuHml2wU7ZQTKNrbuYAnX6befkwvhgT3bt5eHBKYZn84hA2uHK4cMfzcCHJac4V+VLTfKiPWmXJ3AOQJDd9NYC6Uy578fO42ol56ymh4eCN4DhUfbZ6h7OYdTw3RWsTV8AlEJj0eHbu8uI5pHgvblUiyrhMX9FdVnw8jSI4Q99Y7H990IY4lyxZG+sx8dZ08j7nsrXfRiU19uCfbaOfJqjoV3HBw0R9dqwkjUjXMKIcaY5mVOMcaw6+5shKM3roSK6duNDzXAkmxFHzz4rzuA6beXk6uNFjisaN1eZIx2tnzWP/1rx+LJIcO/1KjzrDTMnML+6SbKC3Xd3olCGBuq+kQptRhIGgaMfha0h1Y3ywhRIpdq6pVZCHVp+QUGae14aomA7ud1YiMBTdc9jejPcEOhkFKs3Q6J6itI/QLpMsIZ7IbXYSMfbUJNaTm1fDS+G6EzSHcpBW4zFB1IThSbgLvpwq6S4RTXuj82Ry7sOYJ5oG4c8xBHXbLI+RALrb/xFLNyOHg7lB1kRWM6mqcRhc+io1fk3i6zm8LjLT24XQzfuf2N/jmwdvRzCJ9iSV5HWaS2zi5JTedY7Wv4FTmf4LO6u0f3nNP8AWC2eZuaNwd6RM6P+SfLCPI6isC+cuz7D/Mry/OvyPkEP1JG/CMw29SwjCB/geJQjkcRI/zKIvErcj4By4ivgtmmgmUEIYQQQn4NlhGEEEIIuQjLCEIIIYRchGUEIYQQQi7CMoIQQgghF2EZQQghhJCLsIwghBBCyEX+B0wSWlZPuFtOAAAAAElFTkSuQmCC" 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的密码

...

java Webservice(一)HttpClient远程调用的更多相关文章

  1. Java WebService接口生成和调用 图文详解>【转】【待调整】

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  2. Httpclient远程调用WebService示例(Eclipse+httpclient)

    package cn.com.taiji.pos.httpserver; import java.io.BufferedInputStream;import java.io.ByteArrayOutp ...

  3. Httpclient远程调用WebService示例

    我们将Web Service发布在Tomcat或者其他应用服务器上后,有很多方法可以调用该Web Service,常用的有两种: 1.通过浏览器HTTP调用,返回规范的XML文件内容      2.通 ...

  4. WebService与RMI(远程调用方式实现系统间通信)

    前言 本文是<分布式java应用基础与实践>读书笔记:另外参考了此博客,感觉讲的挺好的,尤其是其中如下内容: 另外,消息方式实现系统间通信本文不涉及.RMI则只采用spring RMI框架 ...

  5. java项目中rmi远程调用实例

    1.创建一个学生实体类Student.java: package com.RMIdemo.entity; @SuppressWarnings("serial") public cl ...

  6. [置顶] Java WebService接口生成和调用 图文详解

    webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间 ...

  7. Java模拟http请求远程调用接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  8. java Webservice(一)HttpClient使用(二)

    HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java.net 包中已经提供了 ...

  9. java Webservice(一)HttpClient使用(一)

    1.拳头之Get/Post拳头是最基本的一重武器,也是最重要的,好比练武之人必须先扎稳马步. java 代码 HttpClient httpclient=new HttpClient();//创建一个 ...

随机推荐

  1. vs2013 密钥_

    vs2013 密钥 最佳答案: BWG7X-J98B3-W34RT-33B3R-JVYW9

  2. STL - 容器 - Deque

    Deque和Vector类似,只不过deque头尾都开放,能够在头尾进行快速插入和删除操作 DequeTest.cpp #include <iostream> #include <d ...

  3. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

  4. Service 隔离

         最近开发了两个App,其中一个App为另一个App提供服务(Service),但要求不允许其他的App使用此服务,一开始的想法是能在API的设计上进行过滤,后来想想此方法不是很安全,被别人反 ...

  5. 自定义self.editButtonItem 改变自定义self.editButtonItem的背景图片

    一: // UIButton *editSome; 为全局变量,已开启ARC; editSome = [UIButton buttonWithType:UIButtonTypeCustom]; edi ...

  6. JDBC一(web基础学习笔记七)

    一.JDBC Java数据库的连接技术(Java DataBase Connectivity),能实现Java程序以各种数据库的访问 由一组使用Java语言编写的类和接口(JDBC API)组成,它j ...

  7. hadoop safemode error

    http://www.cnblogs.com/hustcat/archive/2010/06/30/1768506.html 1.safemode bin/hadoop fs -put ./input ...

  8. PHPCMS V9 加密规则

    PHPCMS V9 加密规则 相关表:v9_admin 加密方式: md5(md5(password)+encrypt) 第一步:对输入的密码32位小写   MD5 对输入的密码进行trim过滤 第二 ...

  9. POSIX 线程详解

    一种支持内存共享的简捷工具 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程.其中还涉及大量幕后细节,读 ...

  10. 解决Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher/Unable to load component interface org.sonar.api.batch.rule.ActiveRules: NullPointerException

    解决办法 Delete the directory data/es in your SonarQube installation. Restart SonarQube.