2012-03-29 21 views
30

Hola, tengo un servidor que tiene varios hosts virtuales configurados en él.Cómo establecer el nombre de host utilizando php curl para una dirección IP específica

Quería hacer una solicitud curl a la IP de este servidor utilizando php. También quería hacer esta solicitud a un nombre de host específico en la IP del servidor.

¿Hay alguna manera de hacerlo?

Un poco más de elaboración: Quiero hacer una solicitud de curl entre mis servidores utilizando LAN interna, usando su IP interna. El problema es que tengo varios sitios alojados en este servidor. Así que cuando hago una solicitud de curl a la IP interna del servidor ... algo así como (curl_init (xxx.xxx.xxx.xxx)), quiero poder decirle a apache que vaya a una carpeta particular apuntada por un anfitrión virtual. Espero que hizo la pregunta un poco más claro .. - hace Vishesh Joshi 3 minutos editar

+0

¿Quieres mostrar su IP diferente con rizo? – safarov

+0

Si es un nombre de host hospedado por un servidor web, entonces puede usar "el_nombrehost.dominio" y debería funcionar, a menos que sea un nombre de host local y usted sea de fuera de la red, entonces tendría que convertir ese dominio en el dominio predeterminado en ese ip para que pueda usar la ip en su lugar. Pero no estoy muy claro si eso es lo que estás mirando – Prix

+0

Quiero hacer una solicitud curl entre mis servidores utilizando LAN interna, usando su IP interna. El problema es que tengo varios sitios alojados en este servidor. Así que cuando hago una solicitud curl a la IP interna del servidor ... algo así como (curl_init (xxx.xxx.xxx.xxx)), quiero poder decirle a apache que vaya a una carpeta particular apuntada a por un host virtual. Espero que la pregunta sea un poco más clara. –

Respuesta

42

Puede configurar el encabezado de host en la solicitud de rizo:

<?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

Gracias Leigh. Acabo de hacer esto y funcionó. Iba a publicar la misma respuesta :) gracias. –

12

Base en Leigh Simpson, Funciona, pero necesito una cadena de consulta adjuntarlo. Eso es lo que yo trabajo en torno a:

<?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

necesita una ruta en la url: solo la IP del host no es suficiente. Por lo tanto, debe establecer curl_setopt ($ ch, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/"); – cernio

13

Para sitios HTTPS usar CURLOPT_RESOLVE que existe en todas las versiones de 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); 

Salida de ejemplo:

* 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

Tenga en cuenta que si bien esta característica se implementa en PHP 5.5, aún no está documentada en la documentación de PHP. Sin embargo, esta es la solución correcta y única para que funcionen los certificados ssl. Por ahora, la documentación adicional se puede leer en el manual de CURL en: http://curl.haxx.se/libcurl/c/CURLOPT_RESOLVE.html – Riimu

+0

¡Eres increíble! ¡Muchas gracias! https://stackoverflow.com/questions/47940730/why-curls-fails-to-verify-google-access-token-whereas-browser-succeeds/48167715#48167715 – centurian

Cuestiones relacionadas