模拟请求:以.dwr结尾的url

写在前面的话:头一次爬取这样的请求,用博客的形式记录一下。

DWR网上查了一下,说是ajax开源框架:Direct Web Remoting。不管怎么样,想要的信息就在这个请求的中,抓包工具看一下请求参数是这样的:


好吧,既然找到了参数,就开始模拟吧。这就遇到了第一个坑,scriptSessionid这个参数是变的,ctrl+f查找一下这个参数,查不到从哪一个请求中产生的。上网查一下,发现也有人遇到过,http://www.sufeinet.com/thread-1759-1-1.html,我去,显示已解决,兴奋的看了看贴吧,好吧,还是让我在页面中找,可是我是真找不到呀。哈哈,多亏了同事的帮忙,发现有个engine.js请求中有和这个参数很像的一个参数,就是少三位数字,怪不得查不到(ps:我是搜的74D536FEF48F67B49E0D868629A60F1E195,少三位当然搜不到。)

扯远一点:从某个购物网站抓数据时,也遇到过这样的,网站上显示11.9%,然后我怎么ctrl+f搜11.9都搜不到,最后也是同事搜到的,我去,原来抓到的页面里是0.119。再见

剩下3位发现是随机的,那就好弄啦。这个参数这个坑就填上了。这里说一下,抓包工具一定要从首页开始抓,不从首页抓抓不到engine.js这个请求的,导致分析很容易掉坑。

最后一个坑,对于基础好的大神,其实也不算是坑了。我主要用httpclient不会提交这样的参数,问了一下同事,直接贴一下代码好了(提交参数,需要加换行符“\r\n”):

public static String textpost(HttpClient client, String url, Map<String, String> headers, String jsonParams,
			String reqCharset) {
		if (StringUtils.isBlank(url) || client == null) {
			throw new IllegalArgumentException("url and client can not be null.");
		}
		if (StringUtils.isBlank(reqCharset)) {
			reqCharset = "utf-8";
		}
		try {
			RequestBuilder requestBuilder = RequestBuilder.post().setUri(url);
			if (StringUtils.isNotBlank(jsonParams)) {
				StringEntity entity = new StringEntity(jsonParams);
				entity.setContentEncoding(reqCharset);
				entity.setContentType("text/plain");
				requestBuilder.setEntity(entity);
			}
			HttpUriRequest request = requestBuilder.build();
			if (MapUtils.isNotEmpty(headers)) {
				for (Map.Entry<String, String> entry : headers.entrySet()) {
					request.addHeader(entry.getKey(), entry.getValue());
				}
			}
			HttpResponse response = client.execute(request);
			try {
				String html = EntityUtils.toString(response.getEntity(), "utf-8");
				return html;
			} catch (IOException e) {
				logger.error("", e);
			}
		} catch (ParseException e) {
			logger.error("", e);
		} catch (IOException e) {
			logger.error("", e);
		}
		return null;
	}
最后说一下,学到的好技巧,这样提交有时会提交错误,可是又不好找原因。可以用抓包工具抓程序的包,然后用对比工具进行对比,就很容易找到错误啦!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值