httpurlconnection-求教一个向Webservice传递参数被转码的错误!

问题描述

求教一个向Webservice传递参数被转码的错误!

我用下面的方式调用一个webservice的方法,传递的strWhere这个参数里面写了个字段模糊匹配的sql语句" strWhere=IDCARD LIKE '%1234567890%' ",在将该参数向webservice传递过去后,webservice那边收到的字符串是将该字符串里面的第一个“%”和后面紧跟着的两位数字进行了转义,显示为“IDCARD LIKE '34567890%'”,其中的不可显示字符,其实是ascii码为12的字符!也就是说这样调用,“%”和后面紧跟的“12”被转义成一个字节了,本人刚学java,对这些编码转换的流程也搞不懂,一时不知道问题出在哪里,贴出代码,往各位大侠指导一下!谢谢!

public static void main(String[] args) {
// TODO Auto-generated method stub
// 获取WebService数据
String strWhere = "strWhere=IDCARD LIKE '%1234567890%13'";
String s3 = HttpUtil.doPost("http://localhost:1739/bill.asmx",
"HelloWorld", strWhere,
"application/x-www-form-urlencoded;charset=utf-8;");

    System.out.println(s3);
    System.exit(0);

}

public static String doPost(String ipStr, String url, String strWhere,
        String contentType) {
    String resultLine;
    OutputStream outputStream = null;
    OutputStreamWriter outputStreamWriter = null;

    System.out.println("sql=" + strWhere);

    InputStream inputStream = null;
    InputStreamReader inputStreamReader = null;
    BufferedReader bufferedReader = null;
    StringBuffer stringBuffer = new StringBuffer();
    try {
        String strUrl = ipStr + "/" + url;
        URL realUrl = new URL(strUrl);
        URLConnection connection = realUrl.openConnection();
        HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("content-type", contentType);
        outputStream = httpURLConnection.getOutputStream();
        outputStreamWriter = new OutputStreamWriter(outputStream);
        System.out.println("strWhere=" + strWhere);
        outputStreamWriter.write(strWhere);// ,0,strWhere.length()
        outputStreamWriter.flush();

        if (httpURLConnection.getResponseCode() >= 300) {
            throw new Exception(
                    "Http Request is not success,Response code is "
                            + httpURLConnection.getResponseCode());

        }
        inputStream = httpURLConnection.getInputStream();
        inputStreamReader = new InputStreamReader(inputStream, "utf-8");
        bufferedReader = new BufferedReader(inputStreamReader);
        while ((resultLine = bufferedReader.readLine()) != null) {
            System.out.println("返回的行=" + resultLine);
            if (!resultLine.trim().equals("")) {
                stringBuffer.append(resultLine).append("
"); // 读完每行后换行
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return stringBuffer.toString();
}

解决方案

加上转义符“”试试

解决方案二:

UrlEncode两次后传输,服务端UrlDecode一次(适用于tomcat,因为tomcat会自动decode一次)

解决方案三:

一个简单的Image图片传递的WebService

时间: 2024-08-01 17:48:58

httpurlconnection-求教一个向Webservice传递参数被转码的错误!的相关文章

JQuery Ajax WebService传递参数的简单实例_jquery

Asp.NET中利用jQuery实现Ajax时,在服务器端可以使用aspx,ashx,以及WebService等方式.最近研究了一下WebService方式,jQuery Ajax 方法调用 jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码这篇帖子给出了很详细的例子,不过没有给出详细解释.其中有几个细节问题开始没注意,费老劲才调通: 1)客户端data数据中的key字段名称必须和服务器端方法参数严格一致. 如客户端: //有参数调用 $(document).r

请教一个同一页面传递参数问题

问题描述 我现在有两个页面,一个是文章管理,一个是评论管理,两个都是用GridView做的,现在从文章管理那里传递一个参数到评论管理,一开始跳到评论管理页面时能获取到ID,可显示数据,可是在评论管理做删除等操作跳回原来的页面时却获取不了传过来的ID,数据显示不出来,怎么解决protectedvoidButton1_Click(objectsender,EventArgse){for(inti=0;i<GridView1.Rows.Count;i++){if(((CheckBox)GridView

请教WPF中打开浏览器,Post方式传递参数的问题

问题描述 现在在WPF中开发,遇到了一个问题:打算在WPF程序中打开一个网页,并给网页传递参数,在网页中获取参数信息并做处理.由于参数比较长而且含有中文,现在就遇到了这个问题:1.打开网页后,参数值不固定,如果过长,就会被IE截取地址,所以传过去的信息不全,而且会把参数以明文的形式显示出来,不方便.2.参数中有中文,这样导致在打开浏览器中,中文编程了乱码,在网页中获取的内容就不对了我是用Process.Start的方式打开网页的,现在想问问能不能用Post的方式打开,解决传递中参数过长.参数中中

php- js在不跳转的情况下向一个页面传递参数

问题描述 js在不跳转的情况下向一个页面传递参数 需求是把textarea传递到savexml.php进行数据保存,但同时我希望页面还留着当前页面.代码如下: <form name=""form1"" id=""form1"" method=""post"" action=""newtest.php""> <input type=

参数传递-求助一个vb.net无法向NVelocity模板引擎传递参数的问题

问题描述 求助一个vb.net无法向NVelocity模板引擎传递参数的问题 我没找到vb.net的资料就用C#的翻译成了下面vb.net代码,我是想把一个类的实例作为参数传给模板,但模板并未收到son的数据,请各位前辈帮忙看看,字符串类型和数值类型都以传递,唯独类的实例不可以传递,代码如下: person类代码: Public Class person Public name As String Public age As Integer End Class html模板代码: <html>

mat-opencv2 数字识别中关于knn-&amp;amp;gt;find_nearest()传递参数的一个问题

问题描述 opencv2 数字识别中关于knn->find_nearest()传递参数的一个问题 Mat trainData(classes*samples,size*size,CV_32FC1); Mat trainClasses(samples*classes,1,CV_32FC1); Mat roi=processing(image,size,size) ; Mat nearests( 1, k, CV_32FC1); Mat vec(1,size*size,CV_32FC1); vec=

wsdl-axis1.4调用webservice 传递自定义对象参数出错

问题描述 axis1.4调用webservice 传递自定义对象参数出错 调用客户端后出现: org.xml.sax.SAXException: Invalid element in cn.services.QueryEquipmentRequest - queryEquipmentRequest 客户端代码(其中queryEquipmentRequest,QueryEquipmentResponse是我自定义的对象): call.addParameter(new QName(nameSpace

controller-Springmvc的@Controller向一个model里传递一个额外的参数和form数据

问题描述 Springmvc的@Controller向一个model里传递一个额外的参数和form数据 需要的参数怎么分开传递? @RequestMapping(value = "/saveInfo/{userName}", method = RequestMethod.POST) @ResponseBody public int saveInfos(@RequestParam("userName") String userName, @PathVariable(&

c#-编写一个方法(完成值修改),传递参数中是传递实体类好还是类的成员好

问题描述 编写一个方法(完成值修改),传递参数中是传递实体类好还是类的成员好 如题,假如有个类Letter{int a,int b,int c....int z}(假设有26个成员吧),我如果想写一个方法来改变某几个成员的值的时候,方法的参数是定义fun(Letter letter)好,还是定义fun(int a,int b,int c,...)几个我需要修改的成员好,方法体的功能是改变原有的值. 解决方案 各有各的好处,参数多,传实体类方便,参数少,传参方便. 解决方案二: 传实体类,或者传成