zhuxiaonling 2012-03-06 16:58
浏览 639
已采纳

关于httpclient用法, post提交,抓取数据不全

请教下面纠结的问题:
我用httpclient,post提交参数,抓取指定检索到的的数据(分多个页面,一个页面一次提交请求),大部分抓取的数据都是全的,大概抓取了100左右页面数据,就开始有一页面的数据不全,断断续续,不全的数据是:没有我指定参数提交的检索到的数据(只有静态页面的数据,即:没有业务数据),但是请求返回来的状态是200,也获取不到异常,纠结了好几天;代码:

public String clientPost(String urll, String htmlbody) {
String[] repParams = htmlbody.split("&");
List data = new ArrayList();
HttpPost post = new HttpPost(urll);
for (String param : repParams) {
data.add(new BasicNameValuePair(param.substring(0,
param.indexOf("=")), param.substring(
param.indexOf("=") + 1, param.length())));
}
try {
// 参数
post.setEntity(new UrlEncodedFormEntity(data, "utf-8"));
// execute post
HttpResponse response = httpClient.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {

            a++;
            System.out.println("第:" + a + "次请求成功");
            HttpEntity entity = response.getEntity();
            BufferedReader read = new BufferedReader(new InputStreamReader(
                    entity.getContent(), "utf-8"));
            String currentLine;
            System.out.println("entity.getContent:"
                    + entity.getContent().toString().length());
            StringBuffer buff = new StringBuffer();
            while ((currentLine = read.readLine()) != null) {
                buff.append(currentLine);
            }
            System.out.println("buff长度:" + buff.length());
            if (buff.length() < 60000) {  //数据不全判断
                int i = 1;
                clientPost(urll, htmlbody);
                System.out.println("第" + (a - i) + "页请求了" + (++i) + "次");
            } else {
                String urlContent = post.getURI().getRawPath()
                        + "\r\n"
                        + post.getRequestLine().toString()
                        + "\r\n"
                        + displayInfo(new UrlEncodedFormEntity(data,
                                "utf-8").getContent());
                logContent(urlContent, buff.toString(), a + ".html");
                System.out.println("buff:--------------"
                        + buff.toString().length());
                return buff.toString();
            }
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        logNetErr(e);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        logNetErr(e);
    } catch (IOException e) {
        e.printStackTrace();
        logNetErr(e);
    } finally {
        post.releaseConnection();
             httpClient.getConnectionManager().closeExpiredConnections();
    }
    return null;
}

还请各位碰到这样的问题指教下:

  • 写回答

12条回答 默认 最新

  • 王启军 2012-03-07 14:57
    关注

    源数据问题,你不一定能捕获到,如果你请求的页面dao报了异常,返回的数据为null,前端页面只是没有数据而已,你完全觉察不到

    问题很好解决,如果内容有问题的打log

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化