2012-03-29 9 views
30

Ciao Ho un server che ha diversi host virtuali impostati su di esso.Come impostare il nome host usando php curl per un ip specifico

Volevo effettuare una richiesta di arricciamento sull'ip di questo server utilizzando php. Inoltre volevo fare questa richiesta ad un nome host specifico sull'ip del server.

C'è un modo per farlo?

Un po 'più di elaborazione: Voglio fare una richiesta di arricciatura tra i miei server usando la LAN interna, usando il loro IP interno. Il problema è che ho diversi siti ospitati su questo server. Quindi, quando faccio una richiesta di ricciolo all'IP interno del server .. qualcosa come (curl_init (xxx.xxx.xxx.xxx)), voglio essere in grado di dire a apache di andare in una particolare cartella a cui punta un host virtuale. Mi auguro che ha reso la questione un po 'più chiaro .. - Vishesh Joshi 3 minuti fa Modifica

+0

Vuoi mostrare il tuo ip diverso con l'arricciatura? – safarov

+0

Se si tratta di un hostname ospitato da un server web, è possibile utilizzare semplicemente "the_hostname.domain" e dovrebbe funzionare a meno che non si tratti di un hostname locale e non si trovi all'esterno della rete, quindi si dovrebbe rendere quel dominio il dominio predefinito su quello ip in modo da poter utilizzare l'ip invece. Ma non è molto chiaro se questo è ciò che stai guardando – Prix

+0

Voglio fare una richiesta di arricciatura tra i miei server usando la LAN interna, usando il loro IP interno. Il problema è che ho diversi siti ospitati su questo server. Quindi quando faccio una richiesta di arricciamento all'IP interno del server .. qualcosa come (curl_init (xxx.xxx.xxx.xxx)), voglio essere in grado di dire a apache di andare in una particolare cartella puntata da un host virtuale. Spero di aver reso la domanda un po 'più chiara .. –

risposta

42

È possibile impostare l'intestazione host nella richiesta ricciolo:

<?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); 
+0

Grazie Leigh. L'ho appena fatto e ha funzionato. Stavo per pubblicare la stessa risposta :) grazie. –

12

Base su Leigh Simpson, Funziona, ma ho bisogno di query string attach con esso. Questo è quello che io lavoro in giro:

<?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); 
?> 
+1

hai bisogno di un percorso nell'url: solo l'IP dell'host non è sufficiente. Pertanto, dovresti impostare curl_setopt ($ ch, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/"); – cernio

13

Per i siti HTTPS uso CURLOPT_RESOLVE che esiste in tutte le versioni di PHP since 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); 

Esempio di output:

* 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... 
+0

Si noti che mentre questa funzione è implementata in PHP 5.5, non è ancora documentata nella documentazione di PHP. Tuttavia, questa è la soluzione corretta e unica per il corretto funzionamento dei certificati ssl. Per ora, la documentazione aggiuntiva può essere letta nel manuale CURL all'indirizzo: http://curl.haxx.se/libcurl/c/CURLOPT_RESOLVE.html – Riimu

+0

Sei fantastico! Grazie molto! https://stackoverflow.com/questions/47940730/why-curls-fails-to-verify-google-access-token-whereas-browser-succeeds/48167715#48167715 – centurian