请帮我保存服务器发送的数据,以响应我的cURL GET请求

时间:2013-02-06 17:10:14

标签: php html curl

我正在尝试通过实际做一些我觉得对自己有用的东西来学习PHP。在我的国家有一个博彩公司有一个网站,我可以通过输入一个票号来检查我是否赢了。我正在尝试编写一个PHP脚本来检查票证的范围是否值得,所以我不必在他们的网站上手动输入每张票。

我设法做到了。但现在我想保存从文件中的服务器获得的响应。我遇到了严重的问题。我设法将详细文件保存到文件中但是我无法将脚本保存到文件中,这是我在运行脚本后在浏览器中的屏幕上看到的。

以下是代码:

<?php

function check($week, $base, $startcheck, $endcheck, $verbose = "true"){

// Set file path
$verbosePath = 'publicbet.txt';
echo "Saving the tickets to: <b>$verbosePath</b>\n";

// Initiate numbering
$i = 0;

// Initiate publicbet.ro IP
$ip = "80.86.107.93";

// Loop
while ($startcheck <= $endcheck){

    // Generate tickkey
    $tickkey = $week.$base.$startcheck;

    // get the current server time
    $time = date('d-m-Y H:i:s');

    // Open a new cURL resource
    $ch = curl_init();

    // Stuff
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($ch, CURLOPT_STDERR,$f = fopen($verbosePath, "a"));
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0");

    // publicbet.ro may be checking the IP adress
    // from where the $tickkey is sent in order to
    // check for abnormalities; we will send the
    // IP adress of the website:)
    $headerarray = array(
        "X-Forwarded-For: $ip");

    // Set the URL and other options
    curl_setopt($ch, CURLOPT_URL, 'http://publicbet.ro/gettickinfo2.php?lang=ro&tickkey='.$tickkey);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.publicbet.ro/');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headerarray);

    // Executing cURL
    curl_exec($ch);

    // Close cURL resource, free up system resources
    curl_close($ch);
    fclose($f);

    // Showing informtion
    $v .= "<br />$i. At <b>$time</b> the server checked the tickkey: <b>$tickkey</b> and returned the tickket: ";
    if ($verbose == "true"){
        echo $v;
        $v = '';
    }

// Modifying values
$startcheck++;
$i++;

}

}

if ($_POST[week] && $_POST[base] && $_POST[startcheck] && $_POST[endcheck]){
check($_POST[week], $_POST[base], $_POST[startcheck], $_POST[endcheck]);
}
else {

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

<title>publicbet.ro</title>

</head>

<body>

<h1>Check your tickets here</h1>

<form action="<?php echo $_SERVER[PHP_SELF];?>" method="post">
    <table>
        <tbody>
            <tr>
                <td>week:</td>
                <td>base:</td>
                <td>start check:</td>
                <td>end check:</td>
            </tr>
            <tr>
                <td><input type="number" name="week" min="00" max="54" maxlength="2" size="2" value=""/></td>
                <td><input type="number" name="base" maxlength="11" size="11" value=""/></td>
                <td><input type="number" name="startcheck" maxlength="6" size="6" value=""/></td>
                <td><input type="number" name="endcheck" maxlength="6" size="6" value=""/></td>
            </tr>
        </tbody>
    </table>
    <br /><input type="submit" value="Check!" />
</form>

</body>

</html>

<?php } ?>

所以请告诉我是否有任何方法可以做我愿意做的事情。我真的很高兴。

如果要测试脚本,请使用以下值: 周:05 基地:16010234203 开始检查:350900 结束检查:350920。

它将返回19张假票和1张真票。我希望显示的所有文本都显示为导出到文本文件而不是显示在我的屏幕上。

有办法做到这一点吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

CURLOPT_RETURNTRANSFER设置为true,然后设置curl_exec(),将其分配给如下变量:

$data = curl_exec($ch)

然后你可以这样保存:

file_put_contents('my_file.txt', $data);

使用常量而不是字符串文字来表示诸如true和false之类的东西。我在你的函数参数中看到$verbose = "true",这可以用$verbose = true替换。

您还在使用常量应该使用字符串文字的常量,例如$_POST[base]应该是$_POST['base']$_POST["base"]

请不要像这样使用$_SERVER['PHP_SELF'],这会让您对XSS攻击等非常开放。您可以执行action=""并将其发布到相关页面,例如{{1} }

你在做什么

PHP_SELF

我建议改为:

if($_POST[base] .....)