我试图抓取这个网站的数据: http://ntthnue.edu.vn/tracuudiem
首先,当我插入数据'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');
我刚收到旧页面。谁能解释为什么?谢谢!
答案 0 :(得分:4)
确保添加所有必需的标题和输入数据。处理此请求的服务器可以进行各种检查,看它是否有效&#34;有效&#34;表格请求。因此,您需要将请求欺骗为尽可能接近常规浏览器请求。
使用 Chrome开发工具等工具查看服务器和浏览器之间发送的请求和响应标头,以便更好地了解您的卷曲设置应该是什么样的。并进一步使用像 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');