Pregunta

Me gustaría consultar en un sitio web remoto si contiene algunos archivos. P.ej. robots.txt, o favicon.ico. Por supuesto, los archivos deben ser accesibles (modo de lectura).

Entonces, si el sitio web es: http://www.example.com/ Me gustaría verificar si http://www.example.com/robots.txt.

Intenté buscar la url como http://www.example.com/robots.txt. Y a veces puede ver si el archivo está ahí porque recibe un error de página no encontrado en el encabezado.

Pero algunos sitios web manejan este error y todo lo que obtiene es algún código HTML que dice que no se puede encontrar la página.

Obtiene encabezados con el código de estado 200.

Entonces, ¿alguien alguna idea de cómo verificar si el archivo existe realmente o no?

Gracias, granit

¿Fue útil?

Solución

Si sirven una página de error con HTTP 200, dudo que tenga una forma confiable de detectar esto. No hace falta decir que es extremadamente estúpido servir páginas de error de esa manera ...

Tu podrías intentar:

  1. Emitir una solicitud principal que le produce solo los encabezados para el recurso solicitado. Tal vez obtenga códigos de estado más confiables de esa manera
  2. Verifique el encabezado de tipo de contenido. Si es text/html puede suponer que es una página de error personalizado en lugar de un robots.txt (que debe servirse como text/plain). Para favicones igualmente. Pero creo que simplemente comprobando text/html Sería la forma más confiable aquí.

Otros consejos

Utilizo una función rápida con Curl para hacer esto, hasta ahora se maneja bien incluso si el servidor de la URL intenta redirigir:

function remoteFileExists($url){
$curl = curl_init($url);
    curl_setopt($curl, CURLOPT_NOBODY, true);
    $result = curl_exec($curl);
    $ret = false;
    if ($result !== false) {
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
        if ($statusCode == 200) {
            $ret = true;   
        }
    }
    curl_close($curl);
    return $ret;
}

$url = "http://www.example.com";
$exists = remoteFileExists("$url/robots.txt");
if($exists){
    $robottxt = file_get_contents("$url/robots.txt");
}else{
    $robottxt = "none";
}

Bueno, si el sitio web le brinda una página de error con un código de estado de éxito, no hay mucho que pueda hacer al respecto.

Naturalmente, si solo estás después robots.txt o favicon.ico o algo más muy específico, simplemente puede verificar si el documento de respuesta está en formato correcto ... como robots.txt debiera ser text/plain conteniendo cosas que robots.txt está permitido contener y favicon.ico Debe ser un archivo de imagen.

El tipo de contenido de encabezado para un archivo .txt debe ser texto/simple, por lo que si recibe texto/html no es un archivo de texto simple.

Para verificar si una imagen es una imagen, necesitaría recuperar el tipo de contenido, ya que generalmente será imagen/png o imagen/gif. También existe la posibilidad de usar la biblioteca GD de PHP para verificar si de hecho es una imagen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top