Tengo algunas preguntas, por favor ayuda:
Puño, puedo acceder a la búsqueda de Google simplemente escribiendo http://74.125.224.211
, porque esta es la dirección IP devuelta por nslookup.
Sin embargo, no pude hacerlo con las direcciones IP devueltas de www.yahoo.com. ¿Cómo voy a la página de búsqueda de Yahoo por su IP?
Otro ejemplo http://www.allaboutcircuits.com
lo resolverá el 68.233.243.63
servidor DNS, pero si voy http://68.233.243.63
, me sale "¡Hola, mundo!".
Segundo, por alguna razón, hay algo mal con los solucionadores de DNS con mi servicio de alojamiento web (¡no se solucionará!) . Entonces comandos como
get_file_contents("http://www.allaboutcircuits.com");
volverá php_network_getaddresses: getaddrinfo failed: Name or service not known
¿Cómo puedo solucionar esto con la dirección IP,
68.233.243.63
Quiero decir, ¿de alguna manera adjuntar el parámetro de nombre de host HTTP a get_file_contents()
?
Me gustaría resolver esto por mi propia cuenta (en mi código), el administrador del servidor no realizará ninguna solución de problemas / ajuste.
fuente
Respuestas:
En su script PHP, cuando accede a él por dirección IP, también debe enviar un
Host:
encabezado en su solicitud con el nombre de dominio correcto.Esta pregunta sobre Stack Overflow explica cómo hacerlo: /programming/356705/how-to-send-a-header-using-a-http-request-through-a-curl-call
fuente
Como dijo wallyk, son servidores virtuales
Tome este ejemplo para apache
En c: \ www \ example.com haga un archivo de índice que diga "¡Hola, mundo! Example.com"
en c: \ www \ example2.com haga un archivo de índice que diga "¡Hellow World! example2.com"
Y cambie su archivo de hosts a
Luego vaya a http://example.com luego vaya a http://example2.com
Así es como puede tener múltiples sitios por ip individual
Básicamente, la respuesta es que no, no podrá obtener ese sitio desde la IP.
fuente
Host
encabezado necesario para que un servidor distinga entre los sitios web que aloja y sirve el correcto.Dice que desea especificar manualmente el nombre de host y la dirección IP, en lugar de confiar en un servidor DNS fuera de su control. Al observar los comentarios en la documentación file_get_contents , veo que los comentaristas allí han resuelto problemas similares al crear un contexto que contiene el Host: encabezado necesario. Algo como esto:
Por supuesto, tenga en cuenta que la desventaja de especificar manualmente tanto el nombre de host como la dirección IP es que si la dirección IP cambia en el futuro (por ejemplo, si el sitio se muda a un nuevo proveedor de alojamiento), su código podría dejar de funcionar hasta actualiza manualmente la dirección IP.
fuente
La dirección IP por sí sola no es suficiente para identificar de forma exclusiva a qué sitio desea ir cuando se ejecutan varios hosts virtuales en el mismo puerto / servidor. En ese caso, debe especificar el encabezado Host en la solicitud HTTP que identifica el nombre del servidor. Puede hacer esto directamente a través de telnet al puerto 80:
donde escribe el comando telnet y las líneas GET y Host, y luego obtiene el código fuente HTML devuelto por el servidor.
O puede usar curl donde agrega específicamente el encabezado (con la
-H
bandera).fuente
Podría utilizar otro servidor DNS en el lado del cliente, en caso de que no sea el servidor web: 8.8.8.8 y 8.8.8.6 son ejecutados por Google, y 4.4.4.2 es un modo de espera común. Namebench te permitirá encontrar el más rápido. Alternativamente, podría usar un servicio proxy de algún tipo (ejecuto el mío en un VPS, o uso Tor, pero hay otras opciones).
Como se trata de PHP, una opción aún más fácil sería ejecutar el código en otro sistema. Kludges no son mantenibles.
fuente