1. 程式人生 > >HttpClient抓取【需登入跳轉頁面】的資料

HttpClient抓取【需登入跳轉頁面】的資料

大家都知道HttpClient可以抓取頁面資料,但是有的頁面需要使用者登入後才可以訪問,第一次我用瀏覽器登入了,把瀏覽器的Cookie放了進去,可以抓取,但是一天後伺服器的Session就過期了,這樣很麻煩,後來在網上找了很多資料,才有了下面的版本,下面需要設定兩個URL,一個是登入頁的,主要是用來獲取登入後的Cookie,然後就可以請求第二次的URL了。程式碼很簡單應該大家都可以看懂,我就不解釋了。

package cn.amazon.http;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator
; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.CookieStore; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache
.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; //對介面進行測試 public class getCookie { private String loginUrl = ""
; private String SearchUrl = ""; private String charset = "UTF-8"; public void test() { //存放傳送引數 Map<String, String> createMap = new HashMap<String, String>(); createMap.put("userName", ""); createMap.put("password", ""); createMap.put("email", "[email protected]"); HttpPost httpPost = null; HttpPost httpPost2 = null; HttpResponse response = null; DefaultHttpClient client = null; String result = null; try { client = new DefaultHttpClient(new PoolingClientConnectionManager()); httpPost = new HttpPost(loginUrl); // 設定請求頭 httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"); // 設定引數 List<NameValuePair> list = new ArrayList<NameValuePair>(); Iterator iterator = createMap.entrySet().iterator(); while (iterator.hasNext()) { Entry<String, String> elem = (Entry<String, String>) iterator.next(); list.add(new BasicNameValuePair(elem.getKey(), elem.getValue())); } if (list.size() > 0) { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset); httpPost.setEntity(entity); } // 第一次請求 response = client.execute(httpPost); System.out.println(response); // 第二次請求 httpPost2 = new HttpPost(SearchUrl); response = client.execute(httpPost2); System.out.println(response); // 登入後的請求內容 if (response != null) { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { result = EntityUtils.toString(resEntity, charset); } } // System.out.println(result); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { getCookie main = new getCookie(); main.test(); } }

相關推薦

HttpClient登入頁面資料

大家都知道HttpClient可以抓取頁面資料,但是有的頁面需要使用者登入後才可以訪問,第一次我用瀏覽器登入了,把瀏覽器的Cookie放了進去,可以抓取,但是一天後伺服器的Session就過期了,這樣很麻煩,後來在網上找了很多資料,才有了下面的版本,下面需要設定

2017-05-21WebForm跨頁面傳值值、C#服務端頁面、 Button的OnClientClick屬性、Js中getAttribute和超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

點擊存緩存並頁面並到頁面緩存

get html == mage one mode console spl load 之前頁面的 html: <image bindtap=‘ontTapdetails‘ data-item_data=‘{{item}}‘ class=

通過分析Ajax請求今日頭條“街拍”美圖

有一些網頁直接請求得到的HTML程式碼並沒有在網頁中看到的內容,因為一些資訊是通過Ajax載入,並通過js渲染生成的,這時就需要通過分析網頁的請求來獲取想要爬取的內容。本文通過抓取今日頭條街拍美圖講解一下具體操作步驟。 網路庫:Requests 解析庫:BeautifulSoup+正則表

vue 判斷是否登入,未登入登入

網頁一進入判斷是否登入,未登入跳轉到登入頁面 router.js export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld,

點選存快取並頁面併到頁面快取

之前頁面的              html: <image bindtap='ontTapdetails' data-item_data='{{

正則達式資料

preg_match_all( [\x{4e00}-\x{9fa5}]*)/u', $str, $arr); 用此語句抓取文字中的中文字元時結果為亂碼, 原因是編碼問題引起, 在執行前需宣告編碼格式, header('content-type:text/html;charset=utf-8'),

Shiro攔截器,在登入時判斷是ajax請求返回json,普通請求頁面

在使用shiro時,會遇到普通的頁面請求以及api介面呼叫的請求,因此需要區別對待來判斷是跳轉登入頁面還是返回json的資料: 1.建立攔截器 package org.zyyd.base.filter; import com.alibaba.fastjson.JSONObject;

通過分析Ajax請求今日頭條街拍美圖

有一些網頁直接請求得到的HTML程式碼並沒有在網頁中看到的內容,因為一些資訊是通過Ajax載入,並通過js渲染生成的,這時就需要通過分析網頁的請求來獲取想要爬取的內容。本文通過抓取今日頭條街拍美圖講解一下具體操作步驟。 網路庫:Requests 解析庫:Beau

scrapy網頁後進行資料

因為一開始的網站爬取的是一個href,所以需要去跳轉一下,即發一個Request <a href="https://XXX.com.cn/w/2018-11-24/doc-ihpevhck4340972.html">你好</a> 以下是自己的程式碼:  

python selenium的使用、檔案下載、登入問題和簡單封裝

這幾天折騰selenium,折騰的夠嗆,我們拿窮遊網來舉例吧,起因是因為要下載窮遊網所有的旅遊錦囊,它的檔案是PDF格式的,點選這個按鈕即可下載,但有個前提,它需要登入,於是就拿手機註冊了一個 起初為了方便,我是打算用phantomjs+selenium這

Python3.6+Django2.0.2 實現使用者登入+首頁--左側選單+新增使用者資訊--展示使用者資訊

一、環境要求:python版本:Python3.6.4web框架:Django2.0.2開發工具:Eclipse+Pydev資料庫:mysqlweb:html+css+JavaScript二、實現需求:1、使用者登入:使用者登入頁面,輸入使用者名稱、密碼(非加密),通過與資料

react登入問題整理

1.react-router-dom 整個前端路由的選擇在index.js頁面ReactDOM.render((      <HashRouter>        <div>            <Route exact path="/"com

vue-router 判斷是否登陸,未登入登陸頁面

移動app 只需驗證首頁是否登陸 meta: { title: 'index', requireAuth: true } main.js中 router.beforeEach((to, from, next) => { if (to.matched.some(m =&g

Jsoup HttpClient 網路上的圖片

package com.th.spider.test; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import org.apache.commons.logging.Log

一個漂亮的ExtJs登入視窗(實現登入

這幾天有程式碼任務,自己做了個登入介面,感覺不錯,拿來共享一下~~ <link rel="stylesheet" href="/ext-3.2.1/resources/css/ext-all.css" type="text/css"></link>

小宗的啟示:不同型別的liferay使用者登入到不同頁面登入個性化)——liferay5.0.1使用者登入後的(二)

在liferay5.0.1使用者登入後的跳轉(一) 中,提到新建使用者在去掉首次登入的條例說明,可以自動跳轉到portal.properties設定的固定頁面上。 問題又來了,在實際應用中,不同使用者需要登入到不同頁面進行。而liferay設定的登入跳轉是侷限的,使得不同使用

vue-router,利用router.beforeEach未登入登入

vue-router提供了導航鉤子,我們使用全域性的鉤子,在進入頁面前判斷是否登入 全域性鉤子 你可以使用 router.beforeEach 註冊一個全域性的 before 鉤子: const router = new VueRouter({ ... }

mvc設計模式實現簡單登入

MVC模式 MVC最初應用於桌面程式中,M指資料模型,V指使用者介面,C指控制器,是Xerox PARC在20世紀80年代為程式語言“Smalltalk-80”發明的一種軟體設計模式,至今已被廣泛使用。基於JavaEE的Web應用開發,經歷了Model1和Model2的不同

python利用hook技術破解https,使用者名稱與登入密碼!

相對於http協議,https是的特點就是他的安全性,http協議的通訊內容用普通的嗅探器可以捕捉到,但是https協議的內容嗅探到的是加密後的內容,對我們的利用價值不是很高,所以一些大的網站----涉及到“大米”的網站,採用的都是http是協議。