Php 使用cURL使用javascript刮取网站

Php 使用cURL使用javascript刮取网站,php,curl,web-scraping,Php,Curl,Web Scraping,我试图搜集该网站的数据: 首先,当我插入数据为“TS4740”的SBD字段时,我可以成功地得到结果。但是,当我尝试运行此代码时: 以下是我的PHP cURL代码: <?php function getData($id) { $url = 'http://ntthnue.edu.vn/tracuudiem'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt(

我试图搜集该网站的数据:

首先,当我插入数据为“TS4740”的SBD字段时,我可以成功地得到结果。但是,当我尝试运行此代码时:

以下是我的PHP cURL代码:

<?php

function getData($id) {
    $url = 'http://ntthnue.edu.vn/tracuudiem';
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, ['sbd' => $id]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $result = curl_exec($ch);

    curl_close($ch);

    return $result;
}

echo getData('TS4740');

确保添加所有必要的标题和输入数据。处理此请求的服务器可以执行各种检查,以查看它是否为“有效”表单请求。因此,您需要欺骗请求,使其尽可能接近常规浏览器请求

使用诸如Chrome Dev tools之类的工具查看在服务器和浏览器之间发送的请求和响应头,以便更好地了解curl设置应该是什么样子。并进一步使用类似于Postman的应用程序,使请求模拟变得超级简单,并查看哪些有效,哪些无效

工作示例:
它不起作用。我认为问题在于javascriptI,我已经让它与一个
Postman
测试一起工作。我已经更新了我的答案。确保您传递了表单中的所有输入。谢谢,它工作正常。但是你能解释一下为什么你的代码可以运行吗?是的,我已经更新了我的答案以获得更好的解释。
<?php

function getData($id) {
    $url = 'http://ntthnue.edu.vn/tracuudiem';
    $ch = curl_init($url);
    $postdata = 'namhoc=2015-2016&kythi_name=Tuy%E1%BB%83n+sinh+v%C3%A0o+l%E1%BB%9Bp+10&hoten=&sbd='.$id.'&btnSearch=T%C3%ACm+ki%E1%BA%BFm';
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Origin: http://ntthnue.edu.vn',
        'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36',
        'Content-Type: application/x-www-form-urlencoded',
        'Referer: http://ntthnue.edu.vn/tracuudiem',
    ));

    $result = curl_exec($ch);

    curl_close($ch);

    return $result;
}

echo getData('TS4740');