首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

微信公眾平台開發實戰:使用 PHP CURL 模擬登錄與數據採集

     編輯:PHP 相關知識

CURL 基礎四步驟

  1. 初始化:$ch = curl_init();
  2. 設置參數:curl_setopt($ch, CURLOPT_..., $value);
  3. 執行請求:$result = curl_exec($ch);
  4. 關閉資源:curl_close($ch);

簡單頁面採集

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);

微信公眾平台模擬登錄完整流程

微信公眾平台採用 HTTPS + AJAX 登錄,密碼經 MD5 加密,無驗證碼。關鍵點:

  • 必須關閉 SSL 證書驗證(CURLOPT_SSL_VERIFYPEER => false)。
  • 需完整模擬瀏覽器標頭,特別是 Referer 與 Content-Type。
  • 登錄成功後響應 JSON 中包含 token,需解析提取。
  • Cookie 必須持久化(CURLOPT_COOKIEJAR),後續請求攜帶(CURLOPT_COOKIEFILE)。
function wechatLogin($username, $password) {
    $password = md5($password); // 密碼預加密
    $post = "username={$username}&pwd={$password}&f=json&imgcode=";
    $loginUrl = "https://mp.weixin.qq.com/cgi-bin/login?";

    $headers = [
        'Accept: application/json, text/javascript, */*',
        'Content-Type: application/x-www-form-urlencoded',
        'Referer: https://mp.weixin.qq.com/'
    ];

    $cookieFile = sys_get_temp_dir() . '/wechat_cookie_' . md5($username) . '.txt';

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $loginUrl,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $post,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_COOKIEJAR => $cookieFile,
        CURLOPT_COOKIEFILE => $cookieFile,
        CURLOPT_TIMEOUT => 30
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($response, true);
    if (isset($data['ErrMsg'])) {
        // ErrMsg 格式通常為 "redirect_url=xxx&token=yyy"
        parse_str($data['ErrMsg'], $params);
        return $params['token'] ?? null;
    }
    return null;
}

// 使用
$token = wechatLogin('your_account', 'your_password');
if ($token) {
    echo "登錄成功,Token: $token";
} else {
    echo "登錄失敗";
}

常用 CURL 選項速查表

選項說明典型值
CURLOPT_URL請求地址字串
CURLOPT_RETURNTRANSFER返回字串而非直接輸出1/0
CURLOPT_POST啟用 POST1
CURLOPT_POSTFIELDSPOST 數據(字串或陣列)mixed
CURLOPT_HTTPHEADER自定義請求標頭陣列
CURLOPT_COOKIEJARCookie 保存文件路徑字串
CURLOPT_COOKIEFILECookie 讀取文件路徑字串
CURLOPT_REFERER偽裝來源頁面URL 字串
CURLOPT_USERAGENT瀏覽器標識字串
CURLOPT_TIMEOUT最大執行秒數整數
CURLOPT_SSL_VERIFYPEER驗證 SSL 證書false (開發/測試)
CURLOPT_FOLLOWLOCATION自動追蹤重定向1
CURLOPT_MAXREDIRS最大重定向次數10
CURLOPT_HEADER包含響應頭1/0
CURLOPT_CUSTOMREQUEST自定義請求方法'DELETE', 'PUT' 等

進階應用建議

  • 登錄後獲取 token,後續所有接口請求均需攜帶該 token(通常作為 URL 參數或標頭)。
  • 定期檢查 Cookie 有效性,失效自動重新登錄。
  • 採集受頻率限制的接口時,加入隨機延遲 sleep(rand(1,3))。
  • 生產環境請勿長期關閉 SSL 驗證,應配置 CURLOPT_CAINFO 指定 CA 證書路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved