Archives pour la catégorie Curl

Utilisation de GET et POST avec la lib CURL

Petit exercice du jour, l’utilisation simple de requêtes GET et POST avec la lib cURL

         
[box icon="paper-pencil"]Requête GET avec l’utilisation de CURL[/box]
 

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
<?php
/*Si on des variables dans le POST on affiche et on s'arrête pour éviter les requêtes en boucle*/
if(count($_POST) > 0)
{
    print_r($_POST);
    exit();
}
/*Initialisation de la ressource curl*/
$c = curl_init();
/*L'url est celle de la page courante pour que le script s'appel lui même*/
curl_setopt($c, CURLOPT_URL, 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
curl_setopt($c, CURLOPT_HEADER, false);
/*On indique à curl d'envoyer une requete post*/
curl_setopt($c, CURLOPT_POST,true);
/*On donne les paramêtre de la requete post*/
curl_setopt($c, CURLOPT_POSTFIELDS,array('param0'=>'value0','param1'=>'value1'));
/*On execute la requete*/
$output = curl_exec($c);
/*On a une erreur alors on la leve*/
if($output === false)
{
    trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
/*Si tout c'est bien passé on affiche le contenu de la requête*/
else
{
    var_dump($output);
}
/*On ferme la ressource*/
curl_close($c);
?>

[box icon="arrow"]La sortie du GET:[/box]
 

1
2
3
4
5
Array
(
[param0] =&gt; value0
[param1] =&gt; value1
)

[box icon="paper-pencil"]Requêtes POST avec l’utilisation de CURL[/box]
 

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
<?php
/*Si on des variables dans le POST on affiche et on s'arrête pour éviter les requêtes en boucle*/
if(count($_POST) > 0)
{
    print_r($_POST);
    exit();
}
/*Initialisation de la ressource curl*/
$c = curl_init();
/*L'url est celle de la page courante pour que le script s'appel lui même*/
curl_setopt($c, CURLOPT_URL, 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
curl_setopt($c, CURLOPT_HEADER, false);
/*On indique à curl d'envoyer une requete post*/
curl_setopt($c, CURLOPT_POST,true);
/*On donne les paramêtre de la requete post*/
curl_setopt($c, CURLOPT_POSTFIELDS,array('param0'=>'value0','param1'=>'value1'));
/*On execute la requete*/
$output = curl_exec($c);
/*On a une erreur alors on la leve*/
if($output === false)
{
    trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
/*Si tout c'est bien passé on affiche le contenu de la requête*/
else
{
    var_dump($output);
}
/*On ferme la ressource*/
curl_close($c);
?>

[box icon="arrow"]La sortie du POST:[/box]
 

1
2
3
4
5
Array
(
[param0] =&gt; value0
[param1] =&gt; value1
)

Php class torrent Bdecode et Bencode avec Curl

De puis plusieurs jours, j’ai besoin de travailler sur le décodage des torrents… j’ai donc chercher désespérément une class assez complète qui puisse me permettre de décoder, encoder un .torrent. Et comme dans mes grande habitude, j’ai dégoter une très bonne class qui permet de faire tout cela.
Je vous laisse la source:

http://pastebin.com/nZFG2xTb

Maintenant, il est assez simple de créer un torrent:

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
require_once 'Torrent.php';

// create torrent
$torrent = new Torrent( './path-to-file-or-folder', 'http://torrent.tracker/annonce' );
if ( ! $error = $torrent->error() ) // error method return the last error message
    $torrent->save('test.torrent'); // save to disk
else
    echo '<br>DEBUG: ',$error;

// print torrent infos
$torrent = new Torrent( './test.torrent' );
echo '<pre>private: ', $torrent->is_private() ? 'yes' : 'no',
     '<br>annonce: ';
var_dump( $torrent->announce() );
echo '<br>name: ', $torrent->name(),
     '<br>comment: ', $torrent->comment(),
     '<br>piece_length: ', $torrent->piece_length(),
     '<br>size: ', $torrent->size( 2 ),
     '<br>hash info: ', $torrent->hash_info(),
     '<br>stats: ';
var_dump( $torrent->scrape() );
echo '<br>content: ';
var_dump( $torrent->content() );
echo '<br>source: ',
     $torrent;

// modify torrent
$torrent->announce('http://alternate-torrent.tracker/annonce'); // add a tracker
$torrent->announce(false); // reset announce trackers
$torrent->announce(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce')); // set tracker(s), it also works with a 'one tracker' array...
$torrent->announce(array(array('http://torrent.tracker/annonce', 'http://alternate-torrent.tracker/annonce'), 'http://another-torrent.tracker/annonce')); // set tiered trackers
$torrent->comment('hello world');
$torrent->name('test torrent');
$torrent->is_private(true);
$torrent->httpseeds('http://file-hosting.domain/path/'); // Bittornado implementation
$torrent->url_list(array('http://file-hosting.domain/path/','http://another-file-hosting.domain/path/')); // GetRight implementation

// print errors
if ( $errors = $torrent->errors() ) // errors method return the error stack
    var_dump( '<br>DEBUG: ', $errors );

// send to user
//$torrent->send();

Transmettre des données Json avec Curl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

/******** http://atmoner.com *********/

$query = 'http://site-externe.eu/fichier.json';

$ch = curl_init(); // ouvre une session curl

// set curl options
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, 'http://votresite.com');  
$data = curl_exec($ch); // execute session curl
curl_close($ch); // ferme session curl
 
$object = json_decode( $data ); // stdClass object  
var_dump( $object );

[php] Spam referers

Voici un petit script que j’utilisais de temps en temps (ne pas trop en abuser, sinon gougueulle vous aura à l’oeuil) pour gonfler mon référencement.
Comme tout le monde le sais, le backlink (ou lien de retour) est un élément important pour le référencement. En réalité, plus les visiteurs viendrons d’un site avec un bon pagerank et un bonne popularité, plus votre référencement augmentera dans le bon sens. D’autres paramètres sont aussi à prendre en compte, comme l’argument « title » des url de backlink, etc…

En utilisant intelligemment la LIBcurl, on peux facilement mettre un place un système qui permettrais d’envoyer des paquets vers votre site avec des en-tète qui permettrais de modifier le référer à notre guise.

Le faite de modifier le referer joue sur la partie Google-analytics de votre site (penser à l’installer bien évidement.)

Ce script a été ecrit par: lemoussel http://www.insolite-du-geek.fr/

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
<?php
//
// Description : Spam referer
// Version      : 0.0.1
// Auteur       : lemoussel <http://www.insolite-du-geek.fr/>
// Copyright   : 2009 Seoblackout.com <http://www.seoblackout.com>
//
 
@set_time_limit(0);
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
 
function CurlSpam($proxy, $proxyprotocol, $referer, $spamsite)
{
   $useragent = 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1';
   $header = array(
                "Accept: text/xml,application/xml,application/xhtml+xml, text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
                "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3",
                "Accept-Charset: ISO-8859-1;q=0.7,*;q=0.7",
                "Keep-Alive: 300"
                        );
 
    $ch = curl_init();
 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookieSpam');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookieSpam');
    curl_setopt($ch, CURLOPT_URL, $spamsite);  
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
 
    if ( $proxy != '')
    {
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
        if ( $proxyprotocol == 'socks4') curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
        else if($proxyprotocol == "socks5") curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
             else curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    }  
 
    $response = curl_exec($ch);
 
    $error = curl_error($ch);
    if ( $error != "" )
    {
            $result = $error;
            return $result;
    }  
    $result = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 
    curl_close($ch);
    unset($ch);
 
    return $result;
}
 
 
if ( (isset($_POST['NBrequetes'])) && (is_numeric($_POST['NBrequetes'])) && ($_POST['NBrequetes'] != '') )
    $requetes = strip_tags($_POST['NBrequetes']);
else
    $requetes = 5;
 
$urlspam = array();
foreach( file('URLspam.csv') as $val )
     array_push( $urlspam, trim( $val ) );
$nburlspam = count($urlspam);
 
if (ob_get_level() == 0) ob_start();
 
if ( (isset($_POST['referer'])) && ($_POST['referer'] != '') )
{  
  $referer = trim(strip_tags($_POST['referer']));
  $boucle = 0;
  while($boucle < $requetes)
  {
    for ($i = 0; $i < $nburlspam; $i++)
    {
        echo "Spam referrer " . ($boucle+1) . " : referrer = $referer pour le site $urlspam[$i] en cours ..."; 
        sleep(5);
        $res = CurlSpam('', '', $referer, $urlspam[$i]);
        if ( $res != '200')
        {
            echo "<br>Erreur : $res<br>";
            exit();
        }
        ob_flush();
        flush();
    }
    $boucle++;
  }
}
 
ob_end_flush();
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Spam Referer</title>
</head>
<body>
<h1>Spam Referer</h1>
<div>
<form method="POST" action="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>">
<p>URL du site &#224; r&#233;f&#233;rencer :</p>
<input name="referer" type="text" size="100" value="<?php if (isset($_POST['referer']) ) {echo strip_tags($_POST['referer']);} ?>">
<p>Nombre de requ&ecirc;tes &agrave; effectuer (5 requ&ecirc;tes par d&#233;faut)&nbsp;:&nbsp;
<input name="NBrequetes" type="text" size="3" maxlength="3" value="<?php if (isset($_POST['NBrequetes'])) {echo strip_tags($_POST['NBrequetes']);} else {echo '5';} ?>"></p>
<p><input type="submit" value="Go" name="go">
<input type='button' value='Annuler' onclick='location.href="<?php echo strip_tags($_SERVER['REQUEST_URI']) ;?>"'></p>
</form>
<br />
<small>Script PHP proposé par SEO BlackOut : <a href="http://www.seoblackout.com/">referencement</a></small>
</div>
</body>
</html>

Remarque :Cet article est purement éducatif et à titre de démonstration sur l’utilisation de Curl avec PHP. L’exploitation de ce script qui y est décrit est à vos risques et périls. Spammer les referers peut avoir l’effet inverse de celui escompté…

Sources