Usando Apache ou Ngnix, sempre crio sites de desenvolvimento baseados em projetos reais, como os http://project1.loc
quais, após adicionar ao meu.hosts
arquivo, o navegador não tem problema de usar.
No entanto, quando tento fazer uma solicitação cURL ( http://project1.loc/post.json
) para esse mesmo URL, nunca recebo nada além de um tempo limite. Estou assumindo que o cURL não se preocupa com meus hosts personalizados e vai direto para um servidor de nomes para obter suas informações.
Como posso consertar isso?
ATUALIZAÇÃO Defini um cabeçalho personalizado "HOST: http: //project1.loc " e agora estou recebendo 400 erros - mas eles são instantâneos, então estou assumindo que cURL está pelo menos usando o arquivo hosts ...
EDIT: Embora esta seja uma resposta aceita atualmente, os leitores podem achar esta outra resposta do usuário John Hart mais adaptada às suas necessidades. Utiliza uma opção que, segundo o usuário Ken , foi introduzida na versão 7.21.3 (que foi lançada em dezembro de 2010 , ou seja, após esta resposta inicial).
Em sua pergunta editada, você está usando o URL como o nome do host, ao passo que precisa ser apenas o nome do host.
Experimentar:
onde
project1.loc
é apenas o nome do host e127.0.0.1
é o endereço IP de destino.(Se você estiver usando curl de uma biblioteca e não na linha de comando, certifique-se de não colocar
http://
oHost
cabeçalho.)fonte
HOST
cabeçalho.Host
nãoHOST
apenas no caso (embora eu ache que não deve ser sensível a maiúsculas e minúsculas). Como eu disse, certifique-se de usar apenas o nome do host noHost
cabeçalho, nada mais (nãohttp://
e não/something
depois). Como você configurou seu arquivo hosts?Use um nome de domínio totalmente qualificado real (como
dev.yourdomain.com
) que aponte para127.0.0.1
ou tente editar o arquivo de hosts apropriado (geralmente / etc / hosts em ambientes * nix).fonte
system32/drivers/etc/hosts
Parece que esse não é um problema incomum.
Verifique isto primeiro.
Se isso não ajudar, você pode instalar um servidor DNS local no Windows, como este . Configure o Windows para usar localhost como servidor DNS. Este servidor pode ser configurado para ser autoritativo para quaisquer domínios falsos de que você precise e para encaminhar solicitações para os servidores DNS reais para todas as outras solicitações.
Eu pessoalmente acho que isso é um pouco exagerado e não consigo ver por que o arquivo hosts não funcionaria. Mas deve resolver o problema que você está tendo. Certifique-se de configurar seus servidores DNS normais como encaminhadores também.
fonte
O servidor realmente recebe as solicitações e você está lidando com o nome do host (alias) corretamente?
Verifique o log do seu servidor da web para ver como a solicitação veio ...
curl tem opções para despejar a requisição enviada e a resposta recebida, é chamado de trace, que será salvo em um arquivo.
--vestígio
Se não houver informações de host ou cabeçalho, você pode forçar esses cabeçalhos com a opção de configuração.
Gostaria de obter a solicitação curl funcionando na linha de comando e, em seguida, tentar implementar em PHP.
a opção de configuração é
-K / - config
as opções relevantes no curl estão aqui
--trace Habilita um dump de rastreamento completo de todos os dados de entrada e saída, incluindo informações descritivas, para o arquivo de saída fornecido. Use "-" como nome de arquivo para que a saída seja enviada para stdout.
-K / - config Especifique de qual arquivo de configuração ler os argumentos curl. O arquivo de configuração é um arquivo de texto no qual os argumentos da linha de comando podem ser escritos, os quais serão usados como se tivessem sido escritos na linha de comando real. As opções e seus parâmetros devem ser especificados na mesma linha do arquivo de configuração, separados por espaço em branco, dois pontos, o sinal de igual ou qualquer combinação deles (entretanto, o separador preferido é o sinal de igual). Se o parâmetro deve conter espaços em branco, o parâmetro deve ser colocado entre aspas. Entre aspas duplas, as seguintes sequências de escape estão disponíveis: \, \ ", \ t, \ n, \ r e \ v. Uma barra invertida precedendo qualquer outra letra é ignorada. Se a primeira coluna de uma linha de configuração for um '#' caractere, o resto da linha será tratado como um comentário.
fonte
http://domain.loc/users/getSettings.xml
e é isso que o access.log mostrou127.0.0.1 - - [09/Aug/2010:11:42:55 -0500] "POST /users/getSettings.xml HTTP/1.1" 499 0 "-" "-"
e o curl relatou.Operation timed out after 10000 milliseconds with 0 bytes received
Portanto, acho que o cURL está realmente lidando com o vhost, já que o access.log mostra a solicitação. Então, novamente, ele pode estar chegando ao domínio correto ...Fazendo um pedido para
Resultou no
-H
arquivo de log contendo:Meu arquivo hosts se parece com:
fonte
-H
é para o cabeçalho completo, não apenas para o host, então use-H 'Host: project1.loc'
. Além disso, apesar do problema, essa solicitação parece funcionar no host correto (obtido corretamente de seuhosts
arquivo pelo curl na linha de comando). O que não está funcionando (403) parece ser um problema de autenticação / autorização, então seu servidor parece estar bloqueando essas solicitações. Eu sugiro corrigir a configuração do servidor para isso.Para configurar hosts virtuais em servidores HTTP Apache que ainda não estão conectados via DNS, eu gosto de usar:
Onde host-name ist o endereço IP ou o nome DNS da máquina na qual o servidor web está sendo executado. Isso também funciona bem para https-Sites.
fonte