需要获取目标url里的指定标签下的值,但是目标url并非一个纯静态的

wx.12301.cc/c/order_detail.html?or...

需要获取目标url里的指定标签下的值,但是目标url并非一个纯静态的

我想通过正则去提取这两个值的,但是看数据,页面也是有一个post动作才拿到的值,post的时候带了一个token,给我这个新手难住了,求助下大虾们,给个方法或思路!

最佳答案

以下代码大部分来源于文心一言

<?php

$url = 'https://wx.12301.cc/c/order_detail.html?ordernum=4Md7jaxnDL#/';

// 解析出4Md7jaxnDL 
$parts = parse_url($url);

$queryString = isset($parts['query']) ? $parts['query'] : '';  

$params = explode('&', $queryString);
$querys = [];
foreach ($params as $param) {
    list($key, $value) = explode('=', $param);
    $querys[$key] = $value;
}

// 请求页面源码
$body = sendRequest($url, 'GET');

// 使用 DOM 解析器解析 HTML
$dom = new \DOMDocument();

$dom->loadHTML($body['response']);

// 查找具有指定 ID 的输入元素  
$inputElement = $dom->getElementById('csrf_token');

// 获取输入元素的值属性  
$value = $inputElement->getAttribute('value');  


// 请求接口
$url = 'https://wx.12301.cc/api/index.php?c=Mall_Member&a=detailShow';
$body = sendRequest($url, 'POST', ['ordernum' => $querys['ordernum'], 'token' => $value]);

var_dump($body);


function sendRequest($url, $method = 'GET', $params = array()) {  
    $ch = curl_init();  

    // 设置 URL 和其他选项  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  

    // 设置请求方法  
    if ($method === 'POST') {  
        curl_setopt($ch, CURLOPT_POST, true);  
        $postData = http_build_query($params);  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);  
    }  

    // 执行请求并获取响应  
    $response = curl_exec($ch);  
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  

    // 关闭 cURL 句柄  
    curl_close($ch);  

    // 返回响应和 HTTP 状态码  
    return array(  
        'response' => $response,  
        'httpCode' => $httpCode,  
    );  
}  

以上代码学习仅供参考,不可用于非法爬去数据

4个月前 评论
includeddd (楼主) 4个月前
讨论数量: 7

token不就是这个东西吗?

PHP

订单状态在js文件里

static.12301.cc/assets/build/js/co...

4个月前 评论
includeddd (楼主) 4个月前

我尝试了curl方法获取,因为他本身有个post动作,curl这个地址回来的内容就是个404

4个月前 评论

这个token是后台生成的,随着页面一起生成的,你可以get获取这个页面内容,然后正则匹配出token的值,最后使用curl来请求这个接口

PHP

file

4个月前 评论
includeddd (楼主) 4个月前

以下代码大部分来源于文心一言

<?php

$url = 'https://wx.12301.cc/c/order_detail.html?ordernum=4Md7jaxnDL#/';

// 解析出4Md7jaxnDL 
$parts = parse_url($url);

$queryString = isset($parts['query']) ? $parts['query'] : '';  

$params = explode('&', $queryString);
$querys = [];
foreach ($params as $param) {
    list($key, $value) = explode('=', $param);
    $querys[$key] = $value;
}

// 请求页面源码
$body = sendRequest($url, 'GET');

// 使用 DOM 解析器解析 HTML
$dom = new \DOMDocument();

$dom->loadHTML($body['response']);

// 查找具有指定 ID 的输入元素  
$inputElement = $dom->getElementById('csrf_token');

// 获取输入元素的值属性  
$value = $inputElement->getAttribute('value');  


// 请求接口
$url = 'https://wx.12301.cc/api/index.php?c=Mall_Member&a=detailShow';
$body = sendRequest($url, 'POST', ['ordernum' => $querys['ordernum'], 'token' => $value]);

var_dump($body);


function sendRequest($url, $method = 'GET', $params = array()) {  
    $ch = curl_init();  

    // 设置 URL 和其他选项  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  

    // 设置请求方法  
    if ($method === 'POST') {  
        curl_setopt($ch, CURLOPT_POST, true);  
        $postData = http_build_query($params);  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);  
    }  

    // 执行请求并获取响应  
    $response = curl_exec($ch);  
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  

    // 关闭 cURL 句柄  
    curl_close($ch);  

    // 返回响应和 HTTP 状态码  
    return array(  
        'response' => $response,  
        'httpCode' => $httpCode,  
    );  
}  

以上代码学习仅供参考,不可用于非法爬去数据

4个月前 评论
includeddd (楼主) 4个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!