web-dev-qa-db-fra.com

Comment définir le nom d'hôte à l'aide de PHP Curl pour une IP spécifique

Salut, j'ai un serveur sur lequel plusieurs hôtes virtuels sont installés.

Je voulais faire une requête curl à l'adresse IP de ce serveur en utilisant php. Je voulais également faire cette demande à un nom d'hôte spécifique sur l'IP du serveur.

Y a-t-il un moyen de le faire?

Un peu plus d'élaboration: je veux faire une demande de curl entre mes serveurs en utilisant le LAN interne, en utilisant leur IP interne. Le problème est que j'ai plusieurs sites hébergés sur ce serveur. Donc, quand je fais une requête curl à l'adresse IP interne du serveur .. quelque chose comme (curl_init (xxx.xxx.xxx.xxx)), je veux pouvoir dire à Apache d'aller dans un dossier particulier pointé par un hôte virtuel. J'espère que cela a rendu la question un peu plus claire .. - Vishesh Joshi Il y a 3 minutes

35
Vishesh Joshi

Vous pouvez définir l'en-tête Host dans la demande curl:

<?php
$ch = curl_init('XXX.XXX.XXX.XXX');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: subdomain.hostname.com'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);
52
simpleigh

Pour les sites HTTPS, utilisez CURLOPT_RESOLVE qui existe dans toutes les PHP version depuis PHP 5.5 .

<?php
$ch = curl_init('https://www.example.com/');
// note: array used here
curl_setopt($ch, CURLOPT_RESOLVE, array(
    "www.example.com:443:172.16.1.1",
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);

Exemple de sortie:

* Added www.example.com:443:172.16.1.1 to DNS cache
* Hostname www.example.com was found in DNS cache
*   Trying 172.16.1.1...
22
sanmai

Base sur Leigh Simpson, cela fonctionne, mais j'ai besoin d'attacher une chaîne de requête avec elle. Voilà ce que je travaille autour:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/index.php?page=api&action=getdifficulty");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: subdomain.hostname.com'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);
?>
14
temple