1. 程式人生 > >Java通過httpclient模擬登入

Java通過httpclient模擬登入

方法1:import org.apache.commons.httpclient.Cookie;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.cookie.CookiePolicy;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;
public class HttpLogin {public static void main(String[] args) {// 登陸 UrlString loginUrl = "http://passport.mop.com/?targetUrl=http://hi.mop.com/?&g=1447141423230&loginCheck=UNLOGINED";// 需登陸後訪問的 UrlString dataUrl = "http://hi.mop.com/?";HttpClient httpClient = new HttpClient();// 模擬登陸,按實際伺服器端要求選用 Post 或 Get 請求方式
PostMethod postMethod = new PostMethod(loginUrl);// 設定登陸時要求的資訊,使用者名稱和密碼NameValuePair[] data = { new NameValuePair("loginName""chzeze123"),                                 new NameValuePair("loginPasswd""**") };postMethod.setRequestBody(data);try {// 設定 HttpClient 接收 Cookie,用與瀏覽器一樣的策略httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
int statusCode=httpClient.executeMethod(postMethod);// 獲得登陸後的 CookieCookie[] cookies = httpClient.getState().getCookies();StringBuffer tmpcookies = new StringBuffer();for (Cookie c : cookies) {tmpcookies.append(c.toString() + ";");System.out.println("cookies = "+c.toString());}if(statusCode==302){//重定向到新的URLSystem.out.println("模擬登入成功");// 進行登陸後的操作GetMethod getMethod = new GetMethod(dataUrl);// 每次訪問需授權的網址時需帶上前面的 cookie 作為通行證                // (httpClient客戶端 會自動帶上  如不是特殊要求一般不進行設定)getMethod.setRequestHeader("cookie", tmpcookies.toString());// 你還可以通過 PostMethod/GetMethod 設定更多的請求後資料// 例如,referer 從哪裡來的,UA 像搜尋引擎都會表名自己是誰,無良搜尋引擎除外postMethod.setRequestHeader("Referer""http://passport.mop.com/");postMethod.setRequestHeader("User-Agent""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");httpClient.executeMethod(getMethod);// 打印出返回資料,檢驗一下是否成功String text = getMethod.getResponseBodyAsString();System.out.println(text);}else {System.out.println("登入失敗");}}catch (Exception e) {e.printStackTrace();}}}

方法2:

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test  {

    public static void main(String[] args) throws IOException {
        InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
String line = null;
//兩個頁面引數
        //據我觀察這個url不變
String backUrl = "http%3A%2F%2Fredmine.tvbanywhere.net%2Fredmine%2F";
String authenticityToken = null;
//建立httpclient物件
CloseableHttpClient httpClient = HttpClients.createDefault();
//get請求訪問這個url是頁面
        //獲取auth_token
HttpGet getParam = new HttpGet("http://redmine.tvbanywhere.net/redmine/login");
CloseableHttpResponse response1 = httpClient.execute(getParam);
InputStream inputStream1 = response1.getEntity().getContent();
inputStreamReader = new InputStreamReader(inputStream1);
reader = new BufferedReader(inputStreamReader);
        while ((line = reader.readLine())!= null){
            if (line.contains("name=\"authenticity_token\"")){
                System.out.println(line);
String sub1 = line.substring(line.indexOf("value=\"") + 7);
authenticityToken = sub1.substring(0, sub1.indexOf("\""));
}
        }
        reader.close();
inputStreamReader.close();
inputStream1.close();
//post 請求是登入操作
HttpPost dologin = new HttpPost("http://redmine.tvbanywhere.net/redmine/login");
List<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("authenticity_token",authenticityToken));
list.add(new BasicNameValuePair("back_url",backUrl));
list.add(new BasicNameValuePair("username","[email protected]"));
list.add(new BasicNameValuePair("password","[email protected]"));
UrlEncodedFormEntity urlEncodedFormEntity = null;
urlEncodedFormEntity = new UrlEncodedFormEntity(list);
dologin.setEntity(urlEncodedFormEntity);
CloseableHttpResponse response2 = httpClient.execute(dologin);
HttpGet get1 = new HttpGet("http://redmine.tvbanywhere.net/redmine/search?issues=1&[email protected]");
CloseableHttpResponse response3 = httpClient.execute(get1);
System.err.println("get" + get1.getURI());
InputStream inputStream3 = response3.getEntity().getContent();
inputStreamReader = new InputStreamReader(inputStream3);
reader = new BufferedReader(inputStreamReader);
        while ((line = reader.readLine()) != null){
            System.out.println(line);
}
    }
}

相關推薦

Java通過httpclient模擬登入

方法1:import org.apache.commons.httpclient.Cookie;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.NameV

Java 關於生成WebService客戶端以及服務端存在賬號密碼登入如何通過程式碼模擬登入解決方案

首先,這篇文章主要是用來做一個記錄,方便以後使用,所以不會有太多關於webService以及wsdl的一些原理上的講解,主要是為了解決實際問題,即:如何生成webService客戶端去呼叫服務端,以及當服務端需要進行賬號密碼登入時,我們該如何模擬登入,來繼續呼叫裡面的介面。 主

Java使用HttpClient模擬http(登入、請求資源並二次處理)栗子

在工作中遇到過在一個伺服器應用(A)上去請求另一個伺服器應用(B)上的資源,然後在A中去二次處理該資源的問題,其實追根到底,就是一次cp的操作。 因為B應用是一個第三方的應用,只能通過使用http請求的方式去獲取其上的資源。 做個簡單的示意圖: 接下來上程式碼:

Java爬蟲(三)-- httpClient 模擬登入 + cookie 登入狀態管理

前言 前面兩章內容闡述了httpClient怎麼模擬Http請求和如何解析頁面。 接下去會講在一些實戰中遇到的問題。 現在回到我的開發摸索之路,之前說到我所爬取的網頁是某個險企提供給合作公司的一個頁面,通過賬號登入然後爬取指定的資料。 這裡就出現本章要寫

java 通過httpclient調用https 的webapi

href web post 描述 har ood pos tle str java如何通過httpclient 調用采用https方式的webapi?如何驗證證書。示例:https://devdata.osisoft.com/p...需要通過httpclient調用該接口,

Java 通過HttpClient Post方式提交json,並從服務端返回json資料

直接上程式碼吧,和前面幾篇文章都差不多 java程式碼: package PostPager; import java.io.IOException; import java.io.InputStream; import java.io.Output

使用httpclient模擬登入京東帳戶並抓取帳戶資訊

這個,前幾天有個人出2000軟妹幣讓我做這個功能,應該是風控系統需要吧,我就鼓搗起來,先分析了一下京東的請求,發現未加密密碼,呵呵呵呵呵呵,故意的吧喂,那我就不客氣哦 專案百度雲地址:http://pan.baidu.com/s/1kVGtgRt 上程式碼:

java使用HttpClient模擬傳送http的get、post請求

Http請求類 public class HttpRequest { /** * 向指定URL傳送GET方法的請求 * * @param url * 傳送請求的URL * @param pa

Java 通過httpClient Post方式提交xml,並從服務端返回資料

在通過http請求連線服務端程式時,有兩種方式httpClient這個不是標準的java庫,但是是開源專案,能夠快捷的開發,但如果做Android的開發,推薦使用httpUrlConnect這個工具。但是httpClient確實也是一個比較好用的工具。 這裡面

使用httpclient模擬登入

                import java.io.BufferedReader; im

利用httpclient 模擬登入,獲取登入後資訊資料

本例使用httpclient 3.0.jar package test; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; impor

java 使用htmlunit模擬登入爬取新浪微博頁面

import java.io.IOException; import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoy

java 通過HTTPClient工具類傳送請求

客戶端code 如下:  package com.eas.bojoy; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.ParseExceptio

C# 中使用System.Net.Http.HttpClient 模擬登入部落格園 (GET/POST)

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Text.RegularEx

HttpWatch+HttpClient模擬登入學校教務系統

因為最近在做一個安卓專案,有查成績模組,而學校並不提供介面,也沒找到其他可用的API,無奈之下只能迴歸原始的模擬登入。首先,我們得先弄明白我們校園網是怎麼工作的,這裡要用到HttpWatch,分析我們正常登入時的請求與響應資訊,當然你有chrome或fox之類的也行。我個人還

Java通過HttpClient的請求封裝

背景 昨天在公司做專案的時候要在Java程式碼裡面呼叫網管系統的Restful介面返回Json資料,然後簡單的看了一下關於Java中發起Http或者Https請求的幾種方式,總結一下。 方法 目前JAVA實現HTTP請求的方法用的最多的有兩種:一

Java爬蟲入門簡介(四)——抓包工具的使用以及使用HttpClient模擬使用者登入的訪問

網路爬蟲需要解決的一個重要的問題就是要針對某些需要使用者名稱和密碼訪問的頁面可以模擬使用者自動登入。在這一篇部落格中我們將介紹如何使用Chrome瀏覽器自帶的抓包工具分析頁面並模擬使用者自動登入。我們會以CSDN的使用者登入為例,講述如何使用抓包工具獲取登入

java 模擬登入新浪微博(通過cookie)

java模擬登入新浪微博(通過cookie) 這幾天一直在研究新浪微博的爬蟲,發現爬取微博的資料首先要登入。本來打算是通過賬號和密碼模擬瀏覽器登入。但是現在微博的登入機制比較複雜。通過賬號密碼還沒有登入成功QAQ。所以就先記錄下,通過cookie直接訪問自

Java通過讀寫鎖模擬緩存池

runnable 一個 nbsp 今天 ted pub 項目 時長 讀寫鎖 緩存池在項目開發中時長用到,在查看了一下相關的資料,發現很多博客中對緩存池的實現有存在著一些漏洞,今天花了點時間梳理一下,用JDK1.5中並發包中的ReentrantReadWriteLock實現

java爬蟲-0022,模擬登入

基本原理:使用者輸入登入資訊=>登入成功,伺服器將登入成功的資訊傳送的前臺,通常存在cookie中=>後續請求帶上登入成功的cookie資訊,在伺服器即視為登入成功 基本步驟:通過谷歌的開發者工具,抓取登入包=>分析出登入需要傳遞的資料(sublime