`
冰糖葫芦
  • 浏览: 297853 次
社区版块
存档分类
最新评论

HttpClient模拟ajax提交

阅读更多
这几天开始做一些爬虫方面的东西,但是在解析页面是碰到了分页数据的爬取问题,如果分页是get方式的url还好,但是如果是Post方式的ajax提交那就感觉比较纠结
思路:
因为是post所以首先想到使用Post的参数方式来做:
public String doHttpSend(String keyWord,String searchType,int pageNum) throws Exception
	{
		PostMethod method = null;
		try
		{
			HttpClient client = getHttpClient();
			method = new PostMethod(SEARCH_URL);
			
			method.addRequestHeader("connection","keep-alive");

			NameValuePair[] params = new NameValuePair[]{
					new NameValuePair("keyWord",keyWord),
					new NameValuePair("page",String.valueOf(pageNum))
					};
                           method.addParameters(params);
			int statusCode = client.executeMethod(method);
			
			if(statusCode != HttpStatus.SC_OK)
			{
				return null;
			}
			
			System.out.println(method.getResponseBodyAsString());
			return method.getResponseBodyAsString();
			
		}
		finally
		{
			if(null != method)
			{
				method.releaseConnection();
			}
		}
	}

但是发现该方法实现发送后,获得的结果总是"System.NotSupportedException";
刚开始以为是Header设置不对,用工具对比后发现header信息基本一直,但是参数格式却是不一样的,比如当前方式的参数格式最终为"param1=value1&param2=value2",而页面上ajax提交的参数确实json格式的字符串;
于是,就修改参数的构造方式:
首先构造json格式的字符串 如:
String param ="{\"keyWord\":"+keyWord+",\"page\":"+pageNum+"}"
,而不能使用NameValuePair来传递参数
再设置参数到method :
method.setRequestBody(param);

这样就可以成功得到ajax返回的数据了,该方法同样适用于asp的异步方法,已经过验证;但是如果使用NameValuePair如何才能解决ajax问题呢,还有待研究!
0
0
分享到:
评论
3 楼 zhao_yi 2016-08-24  
[color=red][size=xx-small][list]
[*]
引用
[u][i][b][/b][/i][/u]

[/list][/size][/co     lor]
啥的
2 楼 冰糖葫芦 2012-07-11  
solo- 写道
试了一下构造json请求也不行,不知道怎么回事

嗯,首先确保参数格式对不对,包括\"都不能少,如果参数没错误的话,就用抓包工具分析对比下httpclient的请求和浏览器本身请求的header有什么不同,比如有没有使用gzip等都可能影响到是否成功,呵呵
1 楼 solo- 2012-07-04  
试了一下构造json请求也不行,不知道怎么回事

相关推荐

    HttpClient以及获取页面内容应用

    1.6.2Post提交表单(模拟表单提交) /** * post方式提交表单(模拟用户登录请求) */ public void postForm() { // 创建默认的httpClient实例. CloseableHttpClient httpclient = HttpClients.createDefault...

    Ajax入门例子

    - **表单验证**:在提交前通过Ajax验证用户输入,避免不必要的页面跳转和刷新。 - **动态加载**:如无限滚动、分页加载等,只更新页面的一部分内容。 - **实时通信**:如聊天室、股票报价等实时更新的信息展示。 ...

    json转实体json解析post模拟请求

    在Java中,可以使用HttpClient库或者OkHttp,而在前端,jQuery库的`$.ajax`或`$.post`函数非常实用。例如,使用jQuery发送POST请求: ```javascript $.ajax({ url: 'http://example.com/api/users', type: 'POST'...

    htmlunit用到的jar包

    3. **Ajax支持**:HTMLUnit可以处理异步JavaScript(Ajax)请求,模拟用户触发的Ajax事件,如按钮点击、表单提交等。 4. **模拟浏览器行为**:HTMLUnit可以模拟用户操作,如点击链接、填写表单、滚动页面等,这对于...

    C#爬虫示例程序.zip

    而对于动态加载内容,如Ajax,可能需要模拟浏览器行为,如使用`Selenium WebDriver`库。 C#爬虫示例程序通常包括以下几个部分: 1. 请求模块:使用`HttpClient`发送HTTP请求。 2. 解析模块:使用`HtmlAgilityPack`...

    工作日志_李响115_202108311

    - 调用 Taotao-rest 的服务需要通过 Java 代码模拟浏览器行为,HttpClient 正好可以胜任这个任务。 - 这种方式允许在后端服务之间进行通信,无需用户浏览器的直接参与。 通过李响的学习内容,我们可以看出他在...

    taobaologin.zip

    在模拟登录时,我们需要发送HTTP请求到服务器,这些请求包括GET和POST等类型,模拟用户填写表单并提交登录信息的过程。 在Java中,我们可以使用多种库来实现HTTP请求的发送,如Apache HttpClient库或Java内置的...

    最新htmlunit 2.29

    - **HTTP通信**:HTMLUnit通过HttpClient库处理HTTP/HTTPS请求,模拟真实的网络通信,包括设置cookies、处理重定向等。 2. **API使用**: - **WebClient**:HTMLUnit的主要接口是WebClient,它负责建立和管理与...

    htmlunit依赖jar包

    HTMLUnit是一款功能强大的Java库,它模拟了一个无头Web浏览器,允许开发者在没有真实浏览器环境的情况下执行JavaScript,处理Ajax请求,以及与网页进行交互。这个库对于自动化测试、数据抓取和网页爬虫项目非常有用...

    com.gargoylesoftware.htmlunit-2.29所需包

    4. **模拟用户行为**:你可以通过HTMLUnit模拟点击链接、填写表单、提交表单等用户行为。 5. **异步处理**:HTMLUnit可以处理AJAX请求,等待异步内容加载完成,这对于现代Web应用的爬取非常关键。 6. **无头模式**:...

    C#做的刷网工具代码及其数据库和脚本语言

    工具可能使用它来请求特定URL、提交表单或执行AJAX操作。 - **Web自动化**:可能使用了如Selenium WebDriver这样的自动化测试框架,它可以控制浏览器进行自动化操作,比如点击按钮、填表、导航等。 5. **多线程与...

    htmlunit webclient下载资源

    我们可以使用WebClient打开URL、提交表单、执行Ajax请求,甚至处理cookies和session。例如,以下是一个简单的WebClient使用示例: ```java import com.gargoylesoftware.htmlunit.WebClient; import ...

    在线考试系统源程序 c#编写

    6. **AJAX技术**:为了提升用户体验,系统可能使用AJAX异步更新页面,使部分内容无需刷新页面即可更新,例如提交答案、检查剩余时间等。 7. **前端技术**:除了后端C#代码,系统前端可能使用HTML、CSS和JavaScript...

    htmlunit爬虫技术jar包

    5. **提交表单**:HTMLUnit可以模拟表单提交,包括POST和GET请求。 ```java HtmlForm form = page.getFormByName("myForm"); form.getInputByName("username").setValueAttribute("user"); form.getInputByName(...

    电视网络精灵

    这个项目专注于网络电视技术,通过模拟网络电视平台,让学员能够掌握网络流媒体、视频播放、用户交互等关键技能。 在.NET框架下,开发电视网络精灵涉及以下知识点: 1. **C#编程**:作为.NET平台的主要编程语言,...

    HTTP Programming Recipes for C# Bots

    - **模拟用户行为**:通过提交表单数据来模拟真实用户的操作,实现自动化任务。 ##### 4.4 收集HTML数据 - **解析HTML文档**:利用DOM解析器如HtmlAgilityPack来提取页面上的信息。 - **处理表格、列表等元素**:...

    JAVA 网络爬虫,已经成功爬取新浪搜狐163

    10. **网页登录与动态加载**:对于需要登录的网站,爬虫需要模拟登录过程,可能涉及Cookie管理、表单提交等。对于使用Ajax或其他技术动态加载内容的网页,可能需要使用Selenium等工具模拟浏览器行为。 11. **JSON...

    爬虫javaDemo

    1. **网页登录**:有些网站需要登录才能访问,Java爬虫需要模拟登录过程,可能涉及POST提交表单、处理验证码等。 2. **动态加载内容**:现代网页常使用AJAX技术,部分内容动态加载,需使用Selenium、Puppeteer等...

    抓取数据:网络抓取Java

    - **Ajax页面**:许多网站使用Ajax技术异步加载数据,需利用Jsoup的connect()方法模拟Ajax请求,或者使用Selenium WebDriver模拟浏览器执行JavaScript。 - **JavaScript渲染**:对于依赖JavaScript渲染的网页,...

    C#.NET实现网页自动登录的方法

    同时,这个方法仅适用于简单的表单登录,对于复杂的登录机制,例如使用JavaScript验证或Ajax提交,可能需要更深入地处理。 总结起来,C#.NET实现网页自动登录主要依赖于WebBrowser控件提供的能力,通过遍历和操作...

Global site tag (gtag.js) - Google Analytics