PHP / cURL / inloggen + dataminen via HTTPS

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjef dresen

sjef dresen

22/11/2012 18:08:52
Quote Anchor link
Beste mensen,

Kan iemand me de juiste richting op sturen wat het volgende betreft:

Ik wil graag via PHP ergens op een (HTTPS) website inloggen (ingeven van USERNAME + WACHTWOORD) en vervolgens (dus nadat er ingelogd is) een tweetal tekstboxen vullen (postcode, huisnummer) om erna de data wat er terug komt (nadat je op "verstuur" zou drukken op het formulier waar je terecht zou komen als je alles gewoon via de browser deed) in een variabele ontvangen.

Alles werkt als ik het allemaal handmatig doe:

1) met browser naar URL gaan
2) inloggen met username + wachtwoord
3) (op de pagina waar ik dan terecht kom) postcode + huisnummer invullen
4) formulier versturen
5) data uitlezen

Maar hoe doe ik al deze handelingen dus vanuit PHP? Ik maak "normaal gesproken" gebruik van cURL. Maar bovenstaand is me dus niet gelukt. Normaal hoef ik ook nergens in te loggen, en vul ik direct die zoekvelden en haal mijn data op.

Hopelijk ben ik een beetje duidelijk wat ik graag zou willen. Alvast bedankt voor het meedenken in ieder geval :-)

Met vriendelijke groet,

Sjef
 
PHP hulp

PHP hulp

22/12/2024 17:47:15
 
- Mark -

- Mark -

22/11/2012 18:11:28
Quote Anchor link
Klinkt niet echt legaal.
 
- Ariën  -
Beheerder

- Ariën -

22/11/2012 18:19:45
Quote Anchor link
Zou je exact willen vertellen wat je bedoeling is?
 
Sjef dresen

sjef dresen

22/11/2012 18:46:13
Quote Anchor link
Ik zou niet weten waarom dit illegaal zou zijn? De partij waar ik de data uit lees heeft me zelf die logingegevens gestuurd. Ik haal toch gewoon dezelfde data op als ik zou doen via de browser?! Misschien is het woord dataminen verkeerd gevallen?

Even voor de duidelijkheid: ik haal ongeveer 1 record per dag op :-)
dus alvast vriendelijk bedankt voor de hulp...
 
- Ariën  -
Beheerder

- Ariën -

22/11/2012 19:06:13
Quote Anchor link
Kan je niet aan de partij vragen of die een API beschikbaar hebben? Dat werkt dan nog veel handiger.
 
Sjef dresen

sjef dresen

22/11/2012 20:32:07
Quote Anchor link
Daar heb ik inderdaad aan gedacht om ze dat te vragen, maar gezien de snelheid hoe ze doodnormale vragen per email afhandelen dacht ik bij mezelf "dat pad wil ik niet gaan bewandelen" ;-)

En ik vind het natuurlijk ook leuk om zulke dingen zelf met PHP te maken.
Is het wel mogelijk volgens jullie? Want volgens mij is die tussenstap erg lastig... (tussenstap tussen eerst inloggen (login velden vullen + versturen), dan weer opnieuw andere velden (postcode + huisnummer) invullen (+versturen), en vervolgens de data wat er terugkomt opvangen) Het is in ieder geval iets wat ik nog nooit gedaan heb. Dus eigenlijk moet ik eerst weten: is dit überhaupt mogelijk?

Thanks voor het eventuele meedenken!!

Met vriendelijke groet,

Sjef
 
John D

John D

22/11/2012 20:43:24
Quote Anchor link
Een beetje offtpoic maar misschien om de discussie daarover te beeindigen: Wanneer Sjef de gegevens voor zichzelf gebruikt, ter lering en de vermaak of het opbouwen van eigen kennis/naslagwerk is het legaal. Pas wanneer Sjef besluit om het te publiceren (papier of internet) wordt het pas illegaal. Om een voorbeeld te geven: Je doet wat kennis op via het web en je schrijft dat op je notitieblokje...totaal legaal dus tot zover.
@sjef: Ik weet geen oplossing voor je maar ik heb dit wel al eens eerder behandeld gezien op phphulp. Zoekt en gij zult vinden.
Gewijzigd op 22/11/2012 20:45:26 door John D
 
Eddy E

Eddy E

22/11/2012 20:45:36
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<?php


ini_set("safe_mode", false);

// eerst phpbb3-zooi inladen
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
//include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
//include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
//include($phpbb_root_path . 'includes/message_parser.' . $phpEx);

ini_set("safe_mode", false);


// functie read_header (voor cUrl)
function read_header($ch, $string)
{

    global $location; #keep track of location/redirects
    global $cookiearr; #store cookies here
    global $ch;
       # ^overrides the function param $ch
       # this is okay because we need to
       # update the global $ch with
       # new cookies

    
    $length = strlen($string);
    if(!strncmp($string, "Location:", 9))
    {
#keep track of last redirect
      $location = trim(substr($string, 9, -1));
    }

    if(!strncmp($string, "Set-Cookie:", 11))
    {
#get the cookie
      $cookiestr = trim(substr($string, 11, -1));
      $cookie = explode(';', $cookiestr);
      $cookie = explode('=', $cookie[0]);
      $cookiename = trim(array_shift($cookie));
      $cookiearr[$cookiename] = trim(implode('=', $cookie));
    }

    $cookie = "";
    if(trim($string) == "")
    {
  #execute only at end of header
      foreach ($cookiearr AS $key=>$value)
      {

        $cookie .= "$key=$value; ";
      }

      curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    }


    return $length;
}


// verkrijg string tussen 2 tags
function tussen($string, $start, $end)
    {

    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);    
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
    }

    
// haal gegevens op uit database
$sql = "
    SELECT
        user_id,
        username,
        STR_TO_DATE( user_birthday, '%e-%m-%Y' ) AS geboortedatum,
        (YEAR( NOW( ) ) - YEAR( STR_TO_DATE( user_birthday, '%e-%m-%Y' ) ) ) AS leeftijd
    FROM phpbb_users
    WHERE
        DAYOFMONTH( STR_TO_DATE( user_birthday, '%e-%m-%Y' ) ) = DAYOFMONTH( NOW( ) )
    AND
        MONTH( STR_TO_DATE( user_birthday, '%e-%m-%Y' ) ) = MONTH( NOW( ) )
    "
;

// maak bericht
$result = mysql_query($sql);
$i = 0;
if($result === false)
    {

    echo 'Fout tijdens het ophalen van de gegevens';
    }

else
    {
    
    //meerdere berichten om deze willekeurig te laten genereren.    
    $bericht = array(
        "Namens het gehele Beheerder-team:\n\n[b]Gefeliciteerd![/b]\n",
        "Ook vandaag zijn er weer jarigen! Het Beheerder-team wil deze van harte feliciteren \n\n",
        "Alweer een jaar ouder! \n\n[b]Gefeliciteerd forumleden! [/b]\n",
        "Gefeliciteerd en een fijne dag toegewenst van het Beheerder-team!  \n\n",
        "Een fijne dag toegewenst jarigen!  \n\n",
        "De Beheerders willen de onderstaande jarigen van harte feliciteren! \n\n",
        "We zingen 'Er is er een jarig' voor iedereen! \n\n",
        "Hiep Hiep Hoera voor de jarigen! \n\n",
        "Dat wordt trakteren voor de onderstaande leden. Gefeliciteerd! Weer een jaar erbij! \n\n",
        "De leden hieronder zijn vandaag jarig! Gefeliciteerd namens de beheerders! \n\n",
        "Alle felicitaties voor diegene die hun geboortedag herdenken. \n\n",
        "Van harte gefeliciteerd en nog vele veilige kilometers toegewenst! \n\n"
        );    
            
    $random = rand (0,11);
    $message = $bericht[$random];
    while ($data = mysql_fetch_assoc($result))
        {

        $message .= $data['username'] . ' met je ' . $data['leeftijd'] . 'e verjaardag.' . "\n";
        $i++;
        }
    }

 
 if($i == 0)
     {

     echo 'Geen jarigen vandaag';
    die();
    }

 
// maak overige gegevens klaar
setlocale(LC_ALL, 'nl_NL');
$maand = strftime("%B");

// WAT MOETEN WE VULLEN OP posting.php?
$poster_naam = 'Hoofdbeheerder';
$poster_wachtwoord = 'had je gedacht ;). Goed dat je er naar kijkt hoor.';
$subject = 'Re: Felicitatie Topic';
$message = htmlentities($message);
$post = 1; // posten?
$lastclick = time() - 11;
$creation_time = time() - 11;
// $form_token ... komt later



// curl starten

$ch = curl_init();
echo 'Gegevens zijn succesvol uit de database gehaald<br>';
echo 'Begin aan inloggen met cUrl()<br>';
    
    
    
    // 1 INLOGGEN
    $pagina = "http://www.zundappforum.com/ucp.php?mode=login";
    $opties = "username=$poster_naam&password=$poster_wachtwoord&login=true";
    curl_setopt($ch, CURLOPT_URL,$pagina); // set url to post to  
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 600000); // times out after Ns
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // times out after Ns
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_POST, 1); // set POST method
    curl_setopt($ch, CURLOPT_POSTFIELDS, $opties); // add POST fields
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.session_id());
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
    $result = curl_exec($ch);

// tussendoor
$sessionid = tussen($result, 'sid=', '" />');
$form_token = sha1($creation_time . '083feb423c3e6a0a' . 'postform' . $sessionid);
echo 'form-tooken: '.$form_token.'<br>';
echo 'Succesvol ingelogd als '.$poster_naam.'<br>';
echo 'Huidige sessie-id: '.$sessionid.'<br>';
echo 'Begin met posten van bericht<br>';

    // 2 POST MAKEN (in juiste topic etc)
    $pagina = "http://www.zundappforum.com/posting.php?f=21&mode=post&sid=$sessionid";
    $opties = "mode=reply&f=3&t=66&subject=$subject&message=$message&post=$post&sid=$sessionid&lastclick=$lastclick&creation_time=$creation_time&form_token=$form_token&pass_token=passthrutoken";
    curl_setopt($ch, CURLOPT_URL,$pagina); // set url to post to
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 600000); // times out after Ns
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); // times out after Ns
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_POST, 1); // set POST method
    curl_setopt($ch, CURLOPT_POSTFIELDS, $opties); // add POST fields
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.$sessionid);
    $result = curl_exec($ch);

// tussendoor
echo 'Klaar met posten...<br>';
echo $result;


?>
 
Sjef dresen

sjef dresen

22/11/2012 20:46:24
Quote Anchor link
Oke, dan ga ik nog eens goed zoeken!

Thanks voor de uitleg over het "niet illegaal zijn".
Ik vond het best een vervelende reactie van - Mark -
Dacht dat ik iets verkeerd had gedaan ofzo... Moeilijk zulke forums, dan denken mensen soms heel andere dingen dan je zelf bedoeld. En natuurlijk nog vervelender als een persoon iets negatiefs zegt, en niets bijdraagt aan de oorspronkelijke vraag :)

Maar goed, in ieder geval bedankt voor jou hulp!!

Groet,

Sjef


Edit:

Ondertussen nog een reactie met VEEL code erin :-)
Thanks Eddy Erkelens !!! Ik ga er meteen naar kijken
Gewijzigd op 22/11/2012 20:48:08 door sjef dresen
 
John D

John D

22/11/2012 20:48:00
Quote Anchor link
Zoek rechtsboven ook eens op curl inloggen.
Ik vond al snel iets: http://www.phphulp.nl/php/forum/topic/inloggen-op-externe-webpagina-via-curl/87086/
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.