2015-06-27 263 views
1

我尽量凑这个网站的数据: http://ntthnue.edu.vn/tracuudiem刮网站使用javascript使用卷曲

首先,当我插入SBD字段数据“TS4740”,我能顺利拿到结果。然而,当我尝试运行这段代码:

这是我的PHP代码卷曲:

<?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'); 

我刚刚得到了旧的网页。有人可以解释为什么吗?谢谢!

回答

3

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

使用类似的Chrome工具Chrome Dev Tools可以查看在服务器和浏览器之间发送的请求和响应标头,以更好地理解您的卷曲设置应该是什么样的。并进一步使用像邮差的应用程序,使请求模拟超级简单,并看看有效和不。

工作例如:

<?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'); 
+0

它不工作。我认为这个问题是关于javascript – pexea12

+0

我有一个'邮差'测试工作。我已经更新了我的答案。确保你通过表单中的所有输入。 – user2479930

+0

添加了一个工作示例 – user2479930