Datei downloaden mit cUrl

Ich stelle hier einfach mal eine Klasse bereit mit der einfache Requests an z.b. einen Webserver stellen kann.

Es lässt sich der anfragende Useragent einstellen (um z.b. einen Webbrowser zu simulieren)
und falls man ein Script für die Console entwickelt lassen sich auch „lognachrichten“ ausgeben.

Hier aber erstmal der Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
  
class basespider
{
    protected $useragent = null;
    protected $cookie = null;
    protected $followlocation = null;
    protected $post = null;
    protected $get = null;
    protected $consolenOutput = false;
  
    /**
     * Constructor mit Grundeinstellungen
     *
     * @param string $useragent        //Useragent unter dem angefragt wird
     * @param bool $consolenOutput    //Soll eine art Log ausgegeben werden?
     */
    public function __construct(
        $useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1) Gecko/20061010 Firefox/2.0',
        $consolenOutput = false
    )
    {
        $this->useragent = $useragent;
        $this->cookie = "data/cookie.txt";
        $this->followlocation = 1;
        $this->timeout = 30;
        $this->consolenOutput = $consolenOutput;
    }
  
    /**
     * Setzt post-parameter
     *
     * @param array $daten
     */
    public function setPost($daten)
    {
        if($daten != null)
        {
            $tmp = "";
            foreach($daten as $key => $value)
            {
                $tmp .= $key."="./*urlencode*/($value)."&";
            }
  
            $this->post = rtrim($tmp, '&');
        }
  
    }
  
    /**
     * Setzt get-parameter
     *
     * @param array $daten
     */
    public function setGet($daten)
    {
        if($daten != null)
        {
            $tmp = "?";
            foreach($daten as $key => $value)
            {
                $tmp .= $key."=".$value."&";
            }
  
            $this->get = rtrim($tmp, '&');
        }
    }
  
    /**
     * setzt einen query zur angegeben url ab und löscht nach dem senden post und get parameter
     *
     * @param string $url
     * @return mixed
     */
    public function Query($url)
    {
        if(isset($this->get) && $this->get !== null)
            $url .= $this->get;
  
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
  
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->followlocation);
  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
  
        if($this->cookie !== null)
        {
            curl_setopt ($ch, CURLOPT_COOKIEJAR, $this->cookie);
            curl_setopt ($ch, CURLOPT_COOKIEFILE, $this->cookie);
        }
  
        if(isset($this->post) && $this->post !== null)
        {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS,$this->post);
  
        }
  
        if($this->consolenOutput)
        {
            echo date("d-m-Y H:i:s").": $url".(isset($this->post) ? ' ('.$this->post.')' :'')."\n";
        }
  
        $return = curl_exec($ch);
  
        if(curl_errno($ch) && $this->consolenOutput)
        {
            echo curl_error($ch);
        }
        curl_close($ch);
  
        unset($this->get);
        unset($this->post);
  
        return $return;
    }
}
  
$spider = new basespider();
  
$res = $spider->Query('http://www.google.de/');
  
?>
  
<html>
    <head>
        <title>Spidertest</title>
    </head>
  
    <body>
 
 
<div style="border: 1px solid black; width: 700px; height: 300px; overflow:auto;"><?=$res?></div>
 
 
    </body>
</html>

In diesem Beispiel laden wir die startseite von Google.

Bevor man die Querymethode aufruft lassen sich aber auch GET und POST Parameter mit einbinden.
Dafür gibt es die Methoden setGet und setPost die jeweils als array übergeben werden.

Das ergebnis $res kann man nun wahlweise ausgeben oder in eine Datei schreiben, z.b. mit der Funktion file_put_contents

Das wars dann auch schon.

Viel spass damit!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert