2009-10-07 5 views
0

J'ai le problème le plus étrange qui soit. J'essaye d'obtenir des résultats de script de CGI fonctionnant sur le même serveur avec get_file_contents et cela fonctionne partout excepté mon ordinateur local sous Ubuntu.get_file_contents échoue avec le code de réponse 400

Il fonctionne quand je demande pour obtenir url de serveur différent (même script en cours d'exécution sur la production), elle déployée sur un serveur différent, je suis absolument sûr que j'ai allow_url_fopen ensemble. Mais chaque fois que j'essaie d'obtenir cette page à partir d'un serveur local, je reçois failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request sur le côté PHP et [error] [client 127.0.0.1] request failed: error reading the headers dans le journal des erreurs Apache.

Alors, que puis-je faire avec, quels en-têtes devrais-je transmettre afin qu'Apache ne me dégoûte pas ou, alternativement, quelles options de configuration dois-je modifier pour les mêmes résultats?

+0

Etes-vous sûr que le chemin/l'URL est correct? Je dois demander ... désolé ... – KyleFarris

+0

Oui, l'url est correcte, je peux le copier sur le navigateur et cela fonctionne – vava

+0

@KyleFarris, rien à être désolé sur le fait :) – vava

Répondre

0

Quel nom d'hôte utilisez-vous pour référencer votre serveur Web local? Peut-être que vous l'appelez "localhost" et attend un vrai nom de domaine.

+0

Je l'appelle 'localhost' mais il résout correctement, je peux voir qu'il atteint apache dans access.log et cela fonctionne à partir du navigateur. – vava

0

En utilisant file_get_contents essayez de forcer manuellement le HTTP headers, comme ça.

<?php 
// Create a stream 
$opts = array(
    'http'=>array(
    'method'=>"GET", 
// gave it a mime-type, also forced text plain. 
// of course, add any other headers you need. 
    'header'=>"Accept: text/plain\r\n" . 
       "Content-Type: application/x-www-form-urlencoded\r\n" 
) 
); 

// create the stream. 
$context = stream_context_create($opts); 

// open the file using the HTTP headers set above 
$file = file_get_contents("your_url_here", false, $context); 
?> 

Si cela ne fonctionne pas, avez-vous pensé à utiliser cURL pour traiter votre demande?

Questions connexes