0

我正在尝试从 php 站点收集一些数据。然而,这个特定的 php 页面已经用它自己的函数(下面代码中的 setReport())转换了 $POST 数据(到我无法复制的特殊时间戳数据)并发送到它的服务器。所以为了得到这个数据,在文本框中输入一个股票编号并按下按钮是我猜的唯一方法。

下面是我想从中获取数据的 php 站点源代码的片段。

http://www.gretai.org.tw/ch/stock/statistics/monthly/st42.php

> <form name="search" method="post" action="st42.php"> <table
> width="736" border="0" cellpadding="0" cellspacing="0" summary="查詢">  
> .......    
>          <td class="search-in02">股票代碼:
> 
>           <input id="input_stock_code" name="input_stock_code"
> class="input01" size="6" maxlength="6">
> 
>             <A HREF="#" onclick="ChoiceStkCode(document.getElementById('input_stock_code'));"
> onkeypress="ChoiceStkCode(document.getElementById('input_stock_code'));"
> class="page_table-text_over">代碼查詢</A>                
> 
>             &nbsp;&nbsp;&nbsp;&nbsp;<input type="button" class="input01" value="查詢" onclick="query()" onkeypress="query()"/>       
> ........
> 
> </table>
> 
> </form>                   function query(){               
> 
>       var code = document.getElementsByName("input_stock_code")[0].value;
> 
>       var param = 'ajax=true&input_stock_code='+code;
> 
>       setReport('result_st42.php',param );        
> 
>   }

我正在考虑使用以下步骤编写 PHP 代码来获取数据。但我不知道如何做第 2 步。有没有人可以帮助解决这个问题?或者还有其他方法可以做到吗?非常感谢!!!

  1. 使用 curl_init 在站点中阅读。
  2. 使用值设置文本框“input_stock_code”并模拟按钮单击。
  3. 解析 curl_exec() 的结果。
4

1 回答 1

0

我无法真正测试这一点,因为我无法阅读该网站 - 但不是获取页面,填写表格并获取结果,您可以直接通过以下方式获取结果页面

http://www.gretai.org.tw/ch/stock/statistics/monthly/result_st42.php?ajax=true&input_stock_code=<code>

setReport() 所做的时间戳业务只是阻止浏览器加载缓存的结果,因此您可以忽略它而不会出现问题。

编辑:更正,您确实需要发布 ajax 和 input_stock_code 变量。您可以使用 CURL 在 PHP 中执行此操作:

// Build URL complete with timestamp
$url = 'http://www.gretai.org.tw/ch/stock/statistics/monthly/result_st42.php?timestamp='.time().'156';

// POST body variables
$fields = array(
            'ajax'=>urlencode('true'),
            'input_stock_code'=>urlencode('1158')
        );

//url-ify the data for the POST
$fields_string = http_build_query($fields);

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

// Pretend we are a browser that is looking at the site
curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0');
curl_setopt($ch,CURLOPT_REFERER, 'http://www.gretai.org.tw/ch/stock/statistics/monthly/st42.php');

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

echo $result;

基于此网站上的片段帖子。

于 2012-06-19T06:22:12.047 回答