1. 程式人生 > >php:curl 模擬ajax登陸53後臺 -1(模擬登陸)

php:curl 模擬ajax登陸53後臺 -1(模擬登陸)

 最近需要用程式模擬登陸53後臺,然後獲取一下資料,更新到自己的後臺,減少公司同事的工作壓力,話不多說,這就動手
 思路如下:
  1、確定伺服器端驗證的登陸資訊都有哪些?
   2、伺服器端驗證登陸資訊後的返回值(成功和失敗)是什麼?
   3、登陸成功後需要經過哪些頁面的跳轉才能到指定的頁面,方便我抓取資料?

大致的思路確定了,就先尋找登陸的驗證資訊包括哪些?
  在登陸頁面發現,登陸操作是由ajax完成的,需要的欄位資訊
  

$.post('?controller=login&action=dologin',{'email':email,'pwd':pwd
,/*'check_dynamicToken':check_dynamicToken,'dynamicToken':dynamicToken,*/'mem_pwd':mem_pwd,'auto_login':auto_login,'is_bbslogin':is_bbslogin,'forward':forward,'client_time':curr_datetime},function(data) { ...... } // 密碼pwd經過自定義函式加密成32位了

以上欄位中出了使用者名稱和密碼外其他的都是固定值
確定了驗證的登陸資訊,就可以把執行模擬登陸操作,程式碼如下:

$url_login = 'http://www.53kf.com/?controller=login&action=dologin';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url_login);
// 返回結果 不直接輸出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// 追蹤內部跳轉
curl_setopt($ch, CURLOPT_MAXREDIRS, 100);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 設定請求頭資訊
$header
= [ 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding:gzip, deflate', 'Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Host:'. 'www.53kf.com', //必填 'X-Requested-With:XMLHttpRequest', // 設定ajax請求頭 ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // 設定響應資訊的編碼 curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, 'gzip, deflate'); // 請求資料 $data = [ 'email'=>'email', 'pwd'=>'js加密的密碼(js函式可以到登陸頁面找到)', 'auto_login'=>0, 'is_bbslogin'=>'0', 'mem_pwd' =>'0', 'forward'=>'', 'client_time'=>date('Y-m-d H:i:s') ]; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $ret = curl_exec($ch); curl_close($ch); print_r($ret); // 列印結果 <br /><script type="text/javascript">setTimeout("window.location.href='?controller=usercenter&activity_flag=1'",100);</script> //顯示失敗

  原因:事實上,已經成功登陸。53客服的登陸驗證已經通過,不過,當登陸操作通過伺服器端驗證後,伺服器會重定向到另一個頁面,在重定向後,需要sessionid記錄登陸狀態,上述的curl模擬的登陸請求並沒有處理sessionid的問題,所以當伺服器重定向後,不能識別當前請求的使用者是否已經登陸;
  解決方法:53的sessionid是通過cookie傳遞的,但在curl模擬登陸的過程中並沒有攜帶cookie,所以伺服器不能記錄我們的登陸狀態,只需要在每次請求時,在請求頭資訊中計入cookie資訊就可以

curl操作cookie:可以將所有cookie資訊儲存在一個檔案中,傳送請求時,將檔案中的cookie全部放入請求頭資訊就可以完成對cookie的操作了,程式碼如下:

// cookie檔案儲存在當前檔案目錄下的cookie檔案中(沒有副檔名不影響功能)
$cookie_file = dirname(__FILE__) . 'cookie';
// 儲存伺服器響應頭資訊中的cookie到檔案
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 想請求頭資訊中新增cookiexinxi
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

然後就可以順利的通過驗證,並且能保持伺服器端的登陸狀態了

相關推薦

php:curl 模擬ajax登陸53後臺 -1模擬登陸

 最近需要用程式模擬登陸53後臺,然後獲取一下資料,更新到自己的後臺,減少公司同事的工作壓力,話不多說,這就動手  思路如下:   1、確定伺服器端驗證的登陸資訊都有哪些?    2、伺服器端驗證

登陸網頁模板 - 1 HTML+CSS

pre com href tom .cn clas 網頁模板 html 輸入 一個用HTML和CSS寫的簡單登錄頁面,主要是用CSS來進行修飾美化的 這個登陸界面有輸入賬號和密碼的表單,還有登陸和註冊兩個按鍵,點擊按鍵分別會輸出“您已成功登陸,稍後會跳轉到您需

AJAX呼叫C#後臺方法帶引數

1、C#程式碼  [WebMethod]     public static  int httest(int s)     {         _Default temp = new _Default();         if (s == 123)            

Spring3.0學習1.1模擬spring

class tor cati 3.0 -- turn user users spring3.0 層次劃分 面向抽象編程 帶來極大的靈活性 IOC(DI) 依賴註入 控制反轉: 正式使用spring IOC 控制反轉 不用自己寫實現 由容器完成 建議使用appic

PHP 基本程式碼規範 PSR-1通用版

##PHP 基本程式碼規範 PSR-1 本節我們將會討論一些基本的程式碼規範問題,以此作為將來討論更高級別的程式碼分享和技術互用的基礎。 RFC 2119中的 必須(MUST),不可(MUST NOT),建議(SHOULD),不建議(SHOULD NOT),可以

CentOS搭建nginx+tomcat+laravel+php+Mongodb環境1nginx篇

<pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">

jquery ajax 獲取後臺資料 純文字

目的是為了拿到後臺資料(純文字) 通過ajax請求獲取到後臺資料 根據不同的到貨型別獲取 採購單位(後臺資料) 比較重要的是 jauery ajax 的引數用法: dataType 型別:String 預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HT

使用angularjs1.x構建前臺開發框架——模擬後臺響應打樁模組

為什麼要模擬後臺響應(打樁模組):在web應用開發中,往往會有前臺需要呼叫後臺介面獲取資料進行頁面除錯但後臺介面未開發完成的情況,因為架構師在分解需求的時候前後臺需求是一起給出的,開發也是並行的,那麼在後臺沒有ready的時候,前臺只能乾等嗎?當然不是。架構師在完成需求分解

NodeJs程式碼除錯1inspector+chrome 實現谷歌瀏覽器除錯後臺nodejs程式碼

注:nodejs6.3版本以後已經內建的除錯模組,不需要再安裝node-inspector等等。直接node --inspect-brk demo.js即可環境:node 10、 谷歌瀏覽器參照:https://segmentfault.com/a/1190000012155

【Python】正則表達式1未完

pes mmu get regular rop 則表達式 line out github 1、正則表達式唯一的用途就是在文本中匹配和尋找模式,模式可以簡單,也可以復雜。 2、Regexr 這個網站很個性的就是,有一個community標簽,打開後可以看到評分由高到低

Codeforces 768B - Code For 1分治思想

spa pac family query strong ace sizeof tro main 768B - Code For 1 思路:類似於線段樹的區間查詢。 代碼: #include<bits/stdc++.h> using namespace st

總結1關於考研

自己的 命運 簡單 學習 預測 畫出 堅持 一個 滿足 關於考研的總結: (1)如果認為對,那就堅持下去,學會放棄。 我一直想有一個更好的平臺,所以選擇了考研,雖然遇到種種阻力,但也最終堅持了下來,最後考了一個相對比較滿意的分數,這也算自己的努力有了一個回報。雖然還是沒有上

基本命令行操作1java編譯

命令行操作 tps 變量 令行 .com .html 否則 註意 設置環境變量 1.  設置環境變量,具體:https://www.cnblogs.com/shinge/p/5500002.html   “cd + 文件名” 可進入指定文件,“cd..” 可返回上一級文件夾

Spark入門1WordCount實現

article sco ack 系列 .text col lines count sta 1 package com.test 2 3 4 import org.apache.spark.{SparkConf, SparkContext} 5 6 7

洛谷P3374 【模板】樹狀數組 1CDQ分治

size 結果 pri amp fine open sum turn 二維 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1.將某一個數加上x 2.求出某區間每一個數的和 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,分別表示該數列數字的個

[黑馬PHP教程]C. 數組的遍歷必記

ant data span lis borde alt 使用 指針 font 一,利用foreach遍歷數組二,數組的指針操作與遍歷原理 三,數組遍歷流程原理 四,利用 for循環 和 next 遍歷數組 五,利用 while循環+ each()+ list()

【模板】可持久化線段樹 1主席樹

base math 一次 數據 mar 指定 das min 第k小 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間

數論總結1基礎數論

周期 display clas ems inline 左右 最大值 沒有 時間 一.進位計數制 1.進制表示: 表示b進制下的n+1位數。 2.進制轉換: 進制向十進制轉換: 乘以基數並展開: 十進制向b進制轉換: 整數部分除以基數並倒取余數。 小數部分乘以基數,並順取

Spring Cloud Eureka 1eureka簡介

運行 清單 服務調用 單元 通過 進程 其中 服務中心 進行 Spring Cloud Eureka 是 Spring Cloud Netflix微服務套件中的一部分,基於netflix eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能。 服務治理: 服務治

LVS負載均衡群集1NAT模式

虛擬機 主從 實驗 a13 dac exp www 高可用群集 權限 一、群集技術概述 1、群集的類型1)負載均衡群集:主要的功能將來自客戶機的訪問請求分流給多臺服務器,從而緩單臺服務器的負載壓力,例如京東淘寶的購物節的時候,當天的並發量是分常大的,單臺服務器是無法承載的。