Ça, ça va poser un problème... comme dit tantôt, mon script ou moi n'aurons pas forcément la main sur les fichiers de configuration du serveur... je ne suis même pas sûr d'avoir l’extension "curl" systématiquement à disposition !
Si l'extension curl n'est pas disponible, ça doit être faisable aussi avec fsockopen() et ses fonctions associées stream_socket_client() à chaque fois en forgeant l'IP dans la requête et en indiquant le domaine dans l'entête.
Un exemple avec fsockopen pour s'inspirer.
mais, du coup il y en a une bonne parti dont j'ignore l'utilité, notamment ce qui concerne "curl".
Curl permet d'effectuer une requête où l'on peut préciser chaque paramètre.
Fais un Ctrl+Maj+i dans ton navigateur, va dans l'onglet Réseau et rafraichis la page, tu verras toutes les requêtes HTTP effectuées par ton navigateur et en cliquant dessus, tu verras les entêtes qui sont proches de l'exemple que je t'ai donné avec Curl.
L'idée avec Curl est de simuler une requête de navigateur donc il faut mettre les entêtes correspondantes.
Avant de l'assembler il faut déjà que tu fasses un essai sur 1 url avec 1 ip pour être sûr que ça fasse bien ce que tu veux.
Voici ci-dessous un exemple que je viens de faire sur thepiratebay.se qui est blacklisté chez les principaux FAI en France et donc dont le DNS renvoie 127.0.0.1 au lieu de sa véritable IP 104.28.4.42 :
<?php
$params = array('url' => 'https://104.28.4.42/index.php',
'host' => 'www.thepiratebay.se',
'header' => '',
'method' => 'GET', // 'POST','HEAD'
'referer' => '',
'cookie' => '',
'post_fields' => '', // 'var1=value&var2=value
'timeout' => 20
);
$requete=new CurlRequest;
$requete->init($params);
$result = $requete->exec();
var_dump($result);
// le code HTML de la page est dans $result['body']
/******** CLASS / FONCTIONS - A NE PAS MODIIFER ********/
class CurlRequest {
private $ch;
public function init($params)
{
$this->ch = curl_init();
$user_agent = 'Mozilla/5.0 (Windows; U;
Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9';
$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.7,en-us;q=0.5,en;q=0.3",
"Accept-Charset: windows-8859-1,utf-8;q=0.7,*;q=0.7",
"Keep-Alive: 300");
if (isset($params['host']) && $params['host']) $header[]="Host: " . $params['host'];
if (isset($params['header']) && $params['header']) $header[]=$params['header'];
@curl_setopt ( $this -> ch , CURLOPT_RETURNTRANSFER , 1 );
@curl_setopt ( $this -> ch , CURLOPT_VERBOSE , 1 );
@curl_setopt ( $this -> ch , CURLOPT_HEADER , 1 );
if ($params['method'] == "HEAD") @curl_setopt($this -> ch,CURLOPT_NOBODY,1);
@curl_setopt ( $this -> ch, CURLOPT_FOLLOWLOCATION, 1);
@curl_setopt ( $this -> ch , CURLOPT_HTTPHEADER, $header );
if ($params['referer']) @curl_setopt ($this -> ch , CURLOPT_REFERER, $params['referer'] );
@curl_setopt ( $this -> ch , CURLOPT_USERAGENT, $user_agent);
if ($params['cookie']) @curl_setopt ($this -> ch , CURLOPT_COOKIE, $params['cookie']);
if ( $params['method'] == "POST" )
{
curl_setopt( $this -> ch, CURLOPT_POST, true );
curl_setopt( $this -> ch, CURLOPT_POSTFIELDS, $params['post_fields'] );
}
@curl_setopt( $this -> ch, CURLOPT_URL, $params['url']);
@curl_setopt ( $this -> ch , CURLOPT_SSL_VERIFYPEER, 0 );
@curl_setopt ( $this -> ch , CURLOPT_SSL_VERIFYHOST, 0 );
if (isset($params['login']) & isset($params['password']))
@curl_setopt($this -> ch , CURLOPT_USERPWD,$params['login'].':'.$params['password']);
@curl_setopt ( $this -> ch , CURLOPT_TIMEOUT, $params['timeout']);
}
/**
* Make curl request
* @return array 'header','body','curl_error','http_code','last_url'
*/
public function exec()
{
$response = curl_exec($this->ch);
$error = curl_error($this->ch);
$result = array( 'header' => '',
'body' => '',
'curl_error' => '',
'http_code' => '',
'last_url' => '');
if ( $error != "" )
{
$result['curl_error'] = $error;
return $result;
}
$header_size = curl_getinfo($this->ch,CURLINFO_HEADER_SIZE);
$result['header'] = substr($response, 0, $header_size);
$result['body'] = substr( $response, $header_size );
$result['http_code'] = curl_getinfo($this -> ch,CURLINFO_HTTP_CODE);
$result['last_url'] = curl_getinfo($this -> ch,CURLINFO_EFFECTIVE_URL);
return $result;
}
}
Cela va te renvoyer les entêtes et le code HTML de la page de ThePirateBay.