Usando Apache o Ngnix siempre creo sitios de desarrollo basados en proyectos reales como los http://project1.loc
que, después de agregar a mi .hosts
archivo, el navegador no tiene problemas para usar.
Sin embargo, cuando intento hacer una solicitud cURL ( http://project1.loc/post.json
) a esa misma URL, nunca obtengo nada más que un tiempo de espera. Supongo que a cURL no le importan mis hosts personalizados y va directamente a un servidor de nombres para obtener su información.
¿Cómo puedo arreglar esto?
ACTUALIZAR Establecí un encabezado personalizado "HOST: http: //project1.loc " y ahora recibo 400 errores, pero son instantáneos, así que supongo que cURL al menos está usando el archivo de hosts ...
EDITAR: Si bien esta es una respuesta actualmente aceptada, los lectores pueden encontrar esta otra respuesta del usuario John Hart más adaptada a sus necesidades. Utiliza una opción que, según el usuario Ken , se introdujo en la versión 7.21.3 (que fue lanzada en diciembre de 2010 , es decir, después de esta respuesta inicial).
En su pregunta editada, está utilizando la URL como nombre de host, mientras que solo debe ser el nombre de host.
Tratar:
donde
project1.loc
es solo el nombre de host y127.0.0.1
es la dirección IP de destino.(Si está usando curl de una biblioteca y no en la línea de comando, asegúrese de no poner
http://
elHost
encabezado).fuente
HOST
encabezado.Host
noHOST
solo por si acaso (aunque creo que no debería distinguir entre mayúsculas y minúsculas). Como dije, asegúrese de usar solo el nombre de host en elHost
encabezado, nada más (nohttp://
y no/something
después). ¿Cómo configuró su archivo de hosts?Utilice un nombre de dominio real y completo (como
dev.yourdomain.com
) que apunte127.0.0.1
o intente editar el archivo de hosts adecuado (generalmente / etc / hosts en entornos * nix).fuente
system32/drivers/etc/hosts
Parece que este no es un problema infrecuente.
Compruebe esto primero.
Si eso no ayuda, puede instalar un servidor DNS local en Windows, como este . Configure Windows para usar localhost como servidor DNS. Este servidor se puede configurar para que sea autorizado para cualquier dominio falso que necesite y para reenviar solicitudes a los servidores DNS reales para todas las demás solicitudes.
Personalmente, creo que esto es un poco exagerado y no veo por qué el archivo de hosts no funciona. Pero debería resolver el problema que tienes. Asegúrese de configurar sus servidores DNS normales también como reenviadores.
fuente
¿El servidor realmente recibe las solicitudes y está manejando el nombre de host (alias) correctamente?
Consulte el registro de su servidor web para ver cómo llegó la solicitud ...
curl tiene opciones para volcar la solicitud enviada y la respuesta recibida, se llama rastreo, que se guardará en un archivo.
--rastro
Si le falta información de host o encabezado, puede forzar esos encabezados con la opción de configuración.
Obtendría la solicitud curl funcionando en la línea de comando y luego intentaría implementarla en PHP.
la opción de configuración es
-K / - config
las opciones que son relevantes en curl están aquí
--trace Habilita un volcado de seguimiento completo de todos los datos entrantes y salientes, incluida la información descriptiva, en el archivo de salida dado. Utilice "-" como nombre de archivo para que la salida se envíe a stdout.
-K / - config Especifica desde qué archivo de configuración leer los argumentos curl. El archivo de configuración es un archivo de texto en el que se pueden escribir argumentos de la línea de comandos que luego se usarán como si estuvieran escritos en la línea de comandos real. Las opciones y sus parámetros deben especificarse en la misma línea del archivo de configuración, separados por espacios en blanco, dos puntos, el signo igual o cualquier combinación de los mismos (sin embargo, el separador preferido es el signo igual). Si el parámetro debe contener espacios en blanco, el parámetro debe ir entre comillas. Entre comillas dobles, están disponibles las siguientes secuencias de escape: \, \ ", \ t, \ n, \ r y \ v. Se ignora una barra invertida que precede a cualquier otra letra. Si la primera columna de una línea de configuración es un '#' carácter, el resto de la línea se tratará como un comentario.
fuente
http://domain.loc/users/getSettings.xml
y esto es lo que mostró el access.log127.0.0.1 - - [09/Aug/2010:11:42:55 -0500] "POST /users/getSettings.xml HTTP/1.1" 499 0 "-" "-"
y curl informó.Operation timed out after 10000 milliseconds with 0 bytes received
Así que supongo que cURL está manejando el vhost ya que el access.log muestra la solicitud. Por otra parte, ahora podría estar llegando al dominio correcto ...Hacer una solicitud a
Resultó en el
-H
archivo de registro que contiene:Mi archivo de hosts se ve así:
fuente
-H
es para el encabezado completo, no solo para el host, así que use-H 'Host: project1.loc'
. Además, a pesar de este problema, esta solicitud parece funcionar en el host correcto (obtenida correctamente de suhosts
archivo al menos mediante curl en la línea de comando). Lo que no funciona (403) parece un problema de autenticación / autorización, por lo que su servidor parece estar bloqueando estas solicitudes. Sugeriría arreglar la configuración del servidor para esto.Para configurar hosts virtuales en servidores http Apache que aún no están conectados a través de DNS, me gusta usar:
Donde nombre de host es la dirección IP o el nombre DNS de la máquina en la que se ejecuta el servidor web. Esto también funciona bien para los sitios https.
fuente