0 0

java HttpClient模拟登陆知乎问答网站,获取不到cookie10

java HttpClient模拟登陆知乎问答网站,获取不到cookie
求解??????
form表单action 地址是https://www.zhihu.com
代码如下:

public static void main(String[] args){
	String loginUrl = "http://www.zhihu.com";
	String username = "XXXXXXXXXXXX";
	String password = "XXXXXXXXXXXX";
	String htmlGetSource = "";
	HttpClient httpClient = new DefaultHttpClient();

	httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
	//获取登录框的隐含参数 type="hidden" name="_xsrf"
	try {
		HttpGet httpGet = new HttpGet(loginUrl);
		HttpResponse response = httpClient.execute(httpGet);
		HttpEntity entity = response.getEntity();
		if(entity!=null){
			InputStream in = entity.getContent();
			String str = "";
			BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
			while((str=br.readLine())!=null){
				htmlGetSource += str+"\n";
			}
		}
	} catch (ClientProtocolException e1) {
		e1.printStackTrace();
	} catch (IOException e1) {
		e1.printStackTrace();
	}
	//应用JsoupHtml解析包解析html包含参数
	Document doc = Jsoup.parse(htmlGetSource);
	Element formContent = null;
	Element inputContent = null;
	String actionStr = "";
	String _xsrf="";
	String checked = "on";
	formContent  = doc.select("form[method=post]").first();
	inputContent = doc.select("input[type=hidden]").first();
	actionStr = formContent.attr("action");
	_xsrf = inputContent.attr("value");
	System.out.println(actionStr);

	HttpPost httpPost = new HttpPost(actionStr);
	HttpResponse response;
	//请求Header
	httpPost.setHeader("(Request-Line)","POST /login HTTP/1.1");
	httpPost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1");  
	httpPost.setHeader("Referer", "http://www.zhihu.com/");  
	httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");  
	httpPost.setHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
	httpPost.setHeader("Accept-Encoding","gzip, deflate");
	httpPost.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
	httpPost.setHeader("Connection","keep-alive");
	//POST参数
	List<NameValuePair> nvps = new ArrayList<NameValuePair>();
	nvps.add(new BasicNameValuePair("_xsrf", _xsrf));
	nvps.add(new BasicNameValuePair("email", username));
	nvps.add(new BasicNameValuePair("password", password));
	nvps.add(new BasicNameValuePair("rememberme", "on"));
	
	try {
		httpPost.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
		response = httpClient.execute(httpPost);
		//Header[] headers = response.getAllHeaders();
		//for(Header h:headers){
		//	System.out.println(h);
		//}
		//得到cookie  
		String set_cookie = response.getFirstHeader("Set-Cookie").getValue();
		System.out.println(set_cookie);
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		httpPost.abort();
	}
}
2012年11月04日 19:02

1个答案 按时间排序 按投票排序

0 0

用了httpClient 之后。取得COOKIE就不用自己从reseponse去拿了吧。你的这个client里面的cookie会被自动设置好的。为什么还用自己从响应中拿呢。client.getState().getCookies()

2012年11月05日 10:11

相关推荐

    java httpclient 模拟登录

    在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...

    httpUtil httpclient 登陆携带cookie访问下一个连接

    在这个场景中,我们关注的是如何使用`httpclient`进行模拟登录并携带cookie来访问后续的URL。这个过程通常涉及到处理session和身份验证,对于开发需要登录功能的Web应用或自动化测试脚本尤其有用。 首先,`...

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...

    httpclient模拟登陆

    - **兼容性**:考虑到不同网站的具体实现差异,模拟登录的代码可能需要进行一定的调整。 通过以上分析,我们可以看到HTTPClient提供了一种非常灵活的方式来模拟登录操作,这对于自动化测试、爬虫开发等领域具有重要...

    HttpClient模拟登陆方正系统

    在模拟登录成功后,我们可以通过HttpClient访问方正系统的其他接口,获取课程、成绩等信息。以下是一些关键步骤: 1. 保持会话:登录成功后,服务器通常会返回一个session cookie。在后续的请求中,我们需要把这个...

    Java 使用HttpClient保持SESSION状态

    3. **处理响应并获取Cookie**:执行登录请求,获取响应。从响应头中找到名为`Set-Cookie`的字段,它包含了服务器返回的Cookie。 ```java CloseableHttpResponse loginResponse = httpClient.execute(loginPost); ...

    java爬虫模拟登陆源码

    Java爬虫模拟登陆是网络爬虫技术中一个重要的环节,特别是在需要登录后才能访问的数据抓取场景中。本文将深入探讨这一主题,介绍如何使用Java编写爬虫进行模拟登录,并获取登录后的网页数据。 首先,我们需要理解...

    JAVA httpclient jar下载

    httpclient常用封装工具 doGet(String url, Map, String&gt; param) doPost(String url, Map, String&gt; param) doPostJson(String url, String json)

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    ### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    java使用HttpClient通过url下载文件到本地

    综上所述,通过Java的HttpClient库,可以在Eclipse环境中编写程序,实现从指定URL下载文件到本地的功能。通过理解HttpClient的工作原理和提供的API,开发者可以构建出稳定、高效的文件下载解决方案。

    Jsoup+httpclient 模拟登陆和抓取

    - 在Java程序中使用Jsoup和HttpClient来模拟登录一个网站并抓取页面内容。 - 案例中包含了登录、页面访问、内容抽取、页面修改和保存到本地等步骤,展示了完整的操作流程。 9. HTTP请求参数设置: - 设置HTTP...

    HttpClient模拟登陆

    在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...

    java httpClient 工具类 java httpClient 工具类

    java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient ...

    爬虫 登陆 知乎 android java

    2. **登录机制**:知乎的登录通常涉及到Cookie和Session。Cookie是服务器发送到用户浏览器并存储的一小块数据,用于跟踪用户状态。Session则是在服务器端存储的用户信息,通常通过Cookie中的Session ID来关联。登录...

    Java HttpClient 全部的jar包

    虽然HttpClient本身不直接使用Zookeeper,但在一些复杂分布式系统中,HttpClient可能会与其他依赖Zookeeper的服务交互。 总结起来,这些jar包共同构成了一个完整的Java HttpClient环境,能够处理各种复杂的HTTP通信...

    httpclient模拟登录实例

    在实际应用中,模拟登录可能涉及到更复杂的情况,如验证码处理、保持登录状态(通过Cookie或Session)、处理重定向等。HttpClient提供了丰富的接口和策略类,使得这些操作变得相对简单。 通过阅读和理解HttpClient...

    java模拟淘宝登录源码

    Java模拟淘宝登录源码是一种常见的网络编程技术,主要用于自动化测试、数据抓取或者模拟用户行为。在这个场景中,我们使用的工具是HTTPClient库,这是一个强大的Java HTTP客户端应用编程接口,可以方便地处理HTTP...

    HttpClient模拟登录实例

    在本实例中,我们将探讨如何使用HttpClient库来模拟登录网站,获取用户信息,以及处理带有验证码的登录场景。 首先,我们需要理解HttpClient的基本使用。HttpClient的核心类包括HttpClient本身,HttpGet、HttpPost...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码...

Global site tag (gtag.js) - Google Analytics