2012-05-09 16 views
33
$html = file_get_contents("https://www.[URL].com"); 
echo $html; 

produce questo nei log degli errori:Perché ottengo 500 errori quando utilizzo file_get_contents(), ma funziona in un browser?

PHP Warning: file_get_contents (https: // www [URL] .com.) [Function.file-get-contents]: failed to open stream: Richiesta HTTP fallita! HTTP/1.1 500 Internal Server Error in /Applications/MAMP/htdocs/test.php on line 13" ;

Tuttavia, il sito funziona bene in un browser

Ho provato ad utilizzare cURL pure.. non capisco eventuali errori nel file di registro, ma $html ora fa eco:..

Server Error in '/' Application
riferimento oggetto non impostato su un'istanza di un oggetto

.. .som Altre informazioni di debug

Qualche idea su come aggirare questo problema?

+1

Avete considerato chiedendo chi ospita l'altro sito web? –

risposta

67

Prova questa soluzione alternativa:

$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n")); 
$context = stream_context_create($opts); 
$header = file_get_contents('https://www.example.com',false,$context); 

Se questo non funziona, forse non puoi leggere da https?

+0

Soluzione interessante. Tuttavia, quando cambio l'agente utente in Chrome, ora ricevo un errore 400. L'utilizzo della stringa "MyAgent" funziona perfettamente però. – remarsh

+3

Grazie - funziona, ma sono incuriosito dal motivo per cui funziona. Qualche ragionamento specifico? –

+1

@DanSmart L'agente utente predefinito di PHP (che probabilmente è solo una stringa vuota) viene bloccato dal server Web da cui si richiede la pagina Web. Ecco perché potrebbe essere necessario impostare un falso agente utente. – modu

4

ho dovuto entrare più dati nell'intestazione:

$opts = array('http' => array(
    'method' => "GET", 
    'header' => "User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0\r\n" 
    . "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" 
    . "Accept-Encoding:gzip, deflate\r\n" 
    . "Accept-Language:cs,en-us;q=0.7,en;q=0.3\r\n" 
    . "Connection:keep-alive\r\n" 
    . "Host:your.domain.com\r\n" 
    )); 
$context = stream_context_create($opts); 
$html = file_get_contents($sap_url, FALSE, $context); 
Problemi correlati