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();
}
}
相关推荐
在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...
在这个场景中,我们关注的是如何使用`httpclient`进行模拟登录并携带cookie来访问后续的URL。这个过程通常涉及到处理session和身份验证,对于开发需要登录功能的Web应用或自动化测试脚本尤其有用。 首先,`...
JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...
- **兼容性**:考虑到不同网站的具体实现差异,模拟登录的代码可能需要进行一定的调整。 通过以上分析,我们可以看到HTTPClient提供了一种非常灵活的方式来模拟登录操作,这对于自动化测试、爬虫开发等领域具有重要...
在模拟登录成功后,我们可以通过HttpClient访问方正系统的其他接口,获取课程、成绩等信息。以下是一些关键步骤: 1. 保持会话:登录成功后,服务器通常会返回一个session cookie。在后续的请求中,我们需要把这个...
3. **处理响应并获取Cookie**:执行登录请求,获取响应。从响应头中找到名为`Set-Cookie`的字段,它包含了服务器返回的Cookie。 ```java CloseableHttpResponse loginResponse = httpClient.execute(loginPost); ...
Java爬虫模拟登陆是网络爬虫技术中一个重要的环节,特别是在需要登录后才能访问的数据抓取场景中。本文将深入探讨这一主题,介绍如何使用Java编写爬虫进行模拟登录,并获取登录后的网页数据。 首先,我们需要理解...
httpclient常用封装工具 doGet(String url, Map, String> param) doPost(String url, Map, String> param) doPostJson(String url, String json)
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
Jsoup+httpclient模拟登陆和抓取页面.pdf
综上所述,通过Java的HttpClient库,可以在Eclipse环境中编写程序,实现从指定URL下载文件到本地的功能。通过理解HttpClient的工作原理和提供的API,开发者可以构建出稳定、高效的文件下载解决方案。
- 在Java程序中使用Jsoup和HttpClient来模拟登录一个网站并抓取页面内容。 - 案例中包含了登录、页面访问、内容抽取、页面修改和保存到本地等步骤,展示了完整的操作流程。 9. HTTP请求参数设置: - 设置HTTP...
在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...
java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient 工具类 java httpClient ...
2. **登录机制**:知乎的登录通常涉及到Cookie和Session。Cookie是服务器发送到用户浏览器并存储的一小块数据,用于跟踪用户状态。Session则是在服务器端存储的用户信息,通常通过Cookie中的Session ID来关联。登录...
虽然HttpClient本身不直接使用Zookeeper,但在一些复杂分布式系统中,HttpClient可能会与其他依赖Zookeeper的服务交互。 总结起来,这些jar包共同构成了一个完整的Java HttpClient环境,能够处理各种复杂的HTTP通信...
在实际应用中,模拟登录可能涉及到更复杂的情况,如验证码处理、保持登录状态(通过Cookie或Session)、处理重定向等。HttpClient提供了丰富的接口和策略类,使得这些操作变得相对简单。 通过阅读和理解HttpClient...
Java模拟淘宝登录源码是一种常见的网络编程技术,主要用于自动化测试、数据抓取或者模拟用户行为。在这个场景中,我们使用的工具是HTTPClient库,这是一个强大的Java HTTP客户端应用编程接口,可以方便地处理HTTP...
在本实例中,我们将探讨如何使用HttpClient库来模拟登录网站,获取用户信息,以及处理带有验证码的登录场景。 首先,我们需要理解HttpClient的基本使用。HttpClient的核心类包括HttpClient本身,HttpGet、HttpPost...
通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码...