您的位置:首页 > 理论基础 > 计算机网络

webservice soap脱离客户端代码单独http调试

2015-05-13 11:06 239 查看
    webservice soap的实现序列化方式默认也是最通用的是采用xml进行序列化以及http协议进行传输的,也就是文本协议传输调用,这样给了我们脱离客户端代码用工具进行调试或者用HttpClient的代码进行各种测试的方便。

    目前需要对webservice soap的server端进行压力测试,然而,每次java这边测试的时候都要启动cxf进行对象的序列化和调用,非常损耗客户端机器的性能,不利于对服务端的压力测试,因此我对其传输的body单独提取出来,采用httpclient进行发送请求。

    此次我们需要借助fiddler这个http调试的神器,关于fiddler的使用,这里就不阐述了,只是对本次使用的过程描述一下。

    由于java的http调用好像绕过了fiddler的监听,所以要用fiddler进行java 的http请求的拦截,只能够采用代理的方式,在fiddle开启代理服务器模式。然后在java的应用程序中加入以下的jvm启动参数:

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888

  或者

-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888

   或者

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");


   此时,java进程中所有的http请求都会以fiddle作为代理,然后才进行下一步的请求,所以自然可以被fiddle拦截到了。

   接下来,我们用java的cxf client进行webservice的调用,会在fiddle中看到请求已经被拦截。



    记录下对应的url以及body体,接下来就可以直接用工具进行对应的http请求了。



    除了用http请求工具直接请求之外,还可以结合之前的压力测试的代码,进行对应的接口的压力测试,而不需要依赖于cxf的序列化和反序列化。

    分享下采用httpclient如何直接发送webservice请求:

    

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
* Created with IntelliJ IDEA.
* User: lsz
* Date: 2015/5/13 0013
* Time: 上午 9:47
* request body
*/
public class HttpRequest {
public static String requestBody(String url,String body) throws IOException {
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
StringEntity entity = new StringEntity(body);
post.setEntity(entity);
HttpResponse response = client.execute(post);
return EntityUtils.toString(response.getEntity());
}

public static void main(String[] args) throws IOException {
String url ="http://192.168.5.18:8723/helloService";
String body = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns2:getBean xmlns:ns2=\"http://api.service.youboy.com/\"/></soap:Body></soap:Envelope>";
System.out.println(requestBody(url,body));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐