Pergunta

Estou usando o seguinte PHP:

$xml = simplexml_load_file($request_url) or die("url not loading");

Eu uso:

$status = $xml->Response->Status->code;

Para verificar o status da resposta. 200 bening está tudo bem, continue.

No entanto, se eu receber um erro de acesso 403, como pego isso no PHP para que eu possa retornar um aviso amigável para uso?

Foi útil?

Solução

Para recuperar o código de resposta HTTP de uma chamada para simplexml_load_file(), a única maneira que eu sei é usar o pouco conhecido do PHP $http_response_header. Essa variável é criada automaticamente como uma matriz que contém cada cabeçalho de resposta separadamente, sempre que você faz uma solicitação HTTP através do wrapper HTTP. Em outras palavras, toda vez que você usa simplexml_load_file() ou file_get_contents() com um URL que começa com "http: //"

Você pode inspecionar seu conteúdo com um print_r() tal como

$xml = @simplexml_load_file($request_url);
print_r($http_response_header);

No seu caso, porém, você pode querer recuperar o XML separadamente com file_get_contents() Em seguida, teste se você obteve uma resposta 4xx, então, se não, passe o corpo para simplexml_load_string(). Por exemplo:

$response = @file_get_contents($request_url);
if (preg_match('#^HTTP/... 4..#', $http_response_header[0]))
{
    // received a 4xx response
}

$xml = simplexml_load_string($response);

Outras dicas

Você terá que usar algo como o módulo Curl ou o módulo HTTP Para buscar o arquivo, use a funcionalidade fornecida por eles para detectar um erro HTTP e depois passe a string deles para Simpxml_load_string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top