发送post请求-向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少

问题描述

向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少

向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少?在在线工具测试的时候,能够获取大量的数据,一般有上百万的命中数,返回一页大概40条记录,但是现在获取的数据命中数hitNum都是18,返回的数据也都是低于18。请各位大神多多指点!!!!!感激不尽。附上源代码和部分获取的数据。
源代码:private String postRequest(String url, HashMap cookies, String protocol) throws OpenApiException {
// url=url+"?charset="+charset;
// System.out.println(url);

    HttpClient httpClient = new ContentEncodingHttpClient();
    //HttpClient httpClient = new DefaultHttpClient();
    //HttpClientParam p = httpClient.getParams();
    //p.setContentCharset("UTF-8");
    httpClient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");
    HttpPost post = new HttpPost(url);
    post.addHeader("User-Agent", "PaiPai API Invoker/Java " + System.getProperty("java.version"));
    post.getParams().setParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE);
    //设置请求超时
    httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 8000);
    //设置读取超时
    httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,8000);
    try {

        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        NameValuePair pair;
        Set<String> keySet = params.keySet();
        for (String key : keySet) {

/** if("charset".equalsIgnoreCase(key)){
// continue;
// }
// pair = new BasicNameValuePair(key, params.get(key));
// parameters.add(pair);*/
Object obj = params.get(key);
// if(obj instanceof Arrays){
if(obj.getClass().isArray()){
String arr[] = (String[]) obj;
for (String value : arr) {
pair = new BasicNameValuePair(key, value);
parameters.add(pair);
}
// pair = new BasicNameValuePair(key, getValue(obj));
// parameters.add(pair);
}else if(obj instanceof String){
pair = new BasicNameValuePair(key, (String)obj);
parameters.add(pair);
}else{
System.out.println(obj.toString());
throw new RuntimeException("http get not support parameter");
}
}
HttpEntity entity = new UrlEncodedFormEntity(parameters, HTTP.UTF_8);
//entity.setContentEncoding("UTF-8");
post.setEntity(entity);

        HttpResponse response = httpClient.execute(post);
        if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
            return "HTTP协议出错:" + response.getStatusLine() + "。";
        }

        HttpEntity responseEntity = response.getEntity();

        String lastResponseContentType;
        byte[] lastResponseContent;
        if (responseEntity != null) {
            Header header = responseEntity.getContentType();
            if(header!=null)
                lastResponseContentType = header.getValue();
            else
                lastResponseContentType = "text/html";
            InputStream stream = responseEntity.getContent();
            try {
                ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[3072];

               /* int c=-1;
                while((c=stream.read())!=-1){
                    byteStream.write(c);
                }*/
                int len = 0;
                while ((len = stream.read(buffer)) != -1)
                {
                    byteStream.write(buffer, 0, len);
                }
                lastResponseContent = byteStream.toByteArray();
                System.out.println("response返回的原始数据:"+lastResponseContent);
                return (new String(lastResponseContent, charset));
            }catch (RuntimeException e) {
                post.abort();
                throw e;
            }finally {
                stream.close();
            }
        }else{
            lastResponseContentType = null;
            Header header = response.getFirstHeader("Content-Type");
            if(header != null) {
                lastResponseContentType = header.getValue();
            }
            lastResponseContent = null;
        }
        return (lastResponseContentType);

    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return "";
}

部分获取的数据:
06-28 01:19:08.282: I/System.out(278): "title": " **2013新款女装短袖百褶 裙修身雪纺连衣裙??",**
06-28 01:19:08.282: I/System.out(278): "nickName": "??????? ",
06-28 01:19:08.282: I/System.out(278): "uin": 943602899,
06-28 01:19:08.282: I/System.out(278): "leg4Status": 0,
06-28 01:19:08.282: I/System.out(278): "leg3Status": 0,
06-28 01:19:08.282: I/System.out(278): "leg2Status": 0,
06-28 01:19:08.282: I/System.out(278): "leg1Status": 0,
06-28 01:19:08.282: I/System.out(278): "colStatus": 0,
06-28 01:19:08.282: I/System.out(278): "autoStatus": 0,
06-28 01:19:08.282: I/System.out(278): "cashStatus": 0,
06-28 01:19:08.282: I/System.out(278): "officStatus": 0,
06-28 01:19:08.282: I/System.out(278): "userVaStatus": 0,
06-28 01:19:08.282: I/System.out(278): "crValue": 0,
06-28 01:19:08.282: I/System.out(278): "cvValue": 0,
06-28 01:19:08.282: I/System.out(278): "level": 0,
06-28 01:19:08.282: I/System.out(278): "price": 10500,
06-28 01:19:08.282: I/System.out(278): "colorInfo": "",
06-28 01:19:08.282: I/System.out(278): "hongBaoInfo": "2013新款女装短袖百褶裙修身雪纺连衣裙??",
06-28 01:19:08.282: I/System.out(278): "property": 17179870356,
06-28 01:19:08.282: I/System.out(278): "saleNum": 0
06-28 01:19:08.282: I/System.out(278): }
06-28 01:19:08.282: I/System.out(278): ],
06-28 01:19:08.282: I/System.out(278): "pageNum": 2,
06-28 01:19:08.292: I/System.out(278): "pageSize": 20,
06-28 01:19:08.292: I/System.out(278): "resultSize": 17,
06-28 01:19:08.292: I/System.out(278): "hitNum": 18
06-28 01:19:08.292: I/System.out(278): }}

解决方案

抓包对比一下,看两个请求之间的数据区别

时间: 2024-08-27 19:34:27

发送post请求-向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少的相关文章

unity 乱码-unity www 做http请求 中文乱码

问题描述 unity www 做http请求 中文乱码 unity 用www做的http请求类 开发环境里正常 当打成apk包后 中文乱码

strut2-Struts2 如何发送参数中带有list对象的请求

问题描述 Struts2 如何发送参数中带有list对象的请求 状态描述: 需要从SSH环境中发送一个POST请求到网络上的某个获取数据的URL,但是此Url的post请求中有一个对象Object1,object1包含两个List的对象,我从网络上查了很多发送post请求的数据,但是根本无法找到如何在请求中加入list的,当时我想是不是可以用url?param=object1.list.get(0).param = value来进行传递,但是没成功. 我知道在PHP中有的POST请求封装的非常顶

ajax发送请求到后台,后台更具请求参数重新绑定repeater数据源__[无效]

问题描述 第一次进入页面的时候,默认绑定了所有的数据,点击页面分类时,ajax发送请求到后台,后台更具请求参数重新绑定repeater数据源,但是页面显示内容仍然不变.页面:$.ajax({url:"<%=Request.FilePath%>?do=getPsByPTName&studentName="+studentName,cache:false,async:false,success:function(msg){}});后台stringdoss=Request

Android编程向服务器发送请求时出现中文乱码问题的解决方法_Android

本文实例讲述了Android编程向服务器发送请求时出现中文乱码问题的解决方法.分享给大家供大家参考,具体如下: 我们在andorid项目中通过get方式向服务器发送请求,其中url参数带有中文,将会产生乱码,乱码产生的原因有两种: 1. 在提交参数时,没有对中文参数进行URL编码 2. Tomcat服务器默认采用的是IOS8859-1编码(不支持中文)得到参数值 解决: 1. 进入android项目,在其中要提交参数的时候,对参数的值进行编码: 复制代码 代码如下: URLEncoder.enc

运维-平台程序对外url请求时,收到的请求会重复,发现有另外的来源IP

问题描述 平台程序对外url请求时,收到的请求会重复,发现有另外的来源IP 我这里的运维平台在业务中需要向第3方发送URL请求,在发生某个业务请求时,偶尔会出现请求过去后,第3方会发现请求重复. 我请求的IP出口地址是确定的(杭州联通的一个IP),然后请第3方协助查询发现该业务行为的请求过去时,偶尔会出现同时又有上海的IP请求过去,两个求情时间间隔很短(1秒内).这样就造成这种业务行为不能成功继续进行. 请问如上问题,应该怎么入手查询原因. 解决方案 下面贴出请第三方查到的两个重复提交url的I

js-发送ajax请求到后台获取的数据不能显示到弹框&amp;amp;lt;div&amp;amp;gt;中

问题描述 发送ajax请求到后台获取的数据不能显示到弹框<div>中 点击按钮发送ajax请求到后台获取的数据,div能弹出来,但是下面的数据不显示,如下图(块里面为空,无数据,只有表头): 在html的标签中的代码:<br> <img src="http://img.ask.csdn.net/upload/201511/23/1448285257_457694.jpg" alt="图片说明"><br> 红框①中的数据

socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空

问题描述 socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空 结构体定义: typedef struct PriceChangeVar { int varNum; //产品编号 float varPrice; //监控价格 int changeMark; //监控标志 }PriceCV; //客户信息结构体 typedef struct CilentInformation { PriceCV MemPriceCV[10]; //价格需求定制结构体 SYSTEMTIM

关于Ajax请求中传输中文乱码问题的解决方案_AJAX相关

今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custId) { $.ajax({ type: "Post", contentType: "application/x-www-form-urlencoded; charset=utf-8", url: "http://localhost/CRM/Ashx/HandK

java web请求和响应中出现中文乱码问题的解析_java

说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不同的编码表,所以,如果编码格式和解码格式不是同一个码表就会出现乱码.想要避免出现乱码,需要使保存和读取时使用相同的码表. 在java web编程中经常会出现乱码,现在详细讲解一下如何进行设置,避免乱码 1 网页编码 在编写网页的时候,需要指定网页的编码格式,使用<meta http-equiv=&quo