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应用或自动化测试脚本尤其有用。 首先,`...

    httpclient模拟登陆

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

    Java 使用HttpClient保持SESSION状态

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

    HttpClient模拟登陆方正系统

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

    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)

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

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

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

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

    Jsoup+httpclient 模拟登陆和抓取

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

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

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

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

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

    HttpClient模拟登陆

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

    httpClient 调用远程接口 获取数据到本地文件夹

    在这个场景中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用的新手机号码信息,并将这些数据存储到本地文件中。以下是对这个过程的详细解释: 1. **HttpClient的基本使用**: HttpClient提供了一...

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

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

Global site tag (gtag.js) - Google Analytics