Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

179
Vistas
Si la declaración con el archivo obtiene contenido para evitar el error 403

Estoy tratando de obtener una cadena de dominios cruzados, pero en algún momento o algún sitio web da un error 403 Forbidden . Entonces, para protegerme de recibir un error, estoy tratando de incluir la if statement , si el sitio uno obtiene un error al obtener la cadena, entonces se moverá a otra parte y tomará la cadena del sitio dos.

Error :

Advertencia: file_get_contents( https://www.example.com ): No se pudo abrir la transmisión: ¡La solicitud HTTP falló! HTTP/1.1 403 Prohibido

Código:

 $siteone = file_get_contents("https://www.example.com"); $sitetwo = file_get_contents("https://www.example.net"); if ($siteone === false) { $error = error_get_last(); echo $sitetwo; } else { echo $siteone; }

Entonces, aquí, si example.com da 403 error , automáticamente ignora example.com y obtiene una cadena de example.net .

También probé try and catch pero no funcionó. ¡¡Por favor ayuda!!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En lugar de usar file_get_contents o quedar atrapado escribiendo funciones usando get_headers etc. para verificar el código de respuesta antes de intentar capturar los contenidos, sugiero usar cURL. Dentro de su solicitud de curl, puede inspeccionar el código de respuesta HTTP directamente y la ventaja adicional es que automáticamente tiene el contenido disponible si la solicitud es exitosa.

 $errors = $valid = $content = array(); $break_on_success = false; $urls=array( 'https://www.bogus.com', 'https://stackoverflow.com/', 'https://developer.mozilla.org', 'https://developer.mozilla.org/en-US/admin', 'https://stackoverflow.com/questions/70518330/if-statement-with-file-get-contents-to-avoid-403-error', 'https://www.gumtree.com/', 'https://httpstat.us/307', 'https://httpstat.us/403', 'https://httpstat.us/401', 'https://www.farcebook.com' ); foreach( $urls as $url ){ $ch=curl_init( $url ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true ); curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 ); curl_setopt( $ch, CURLOPT_CAINFO, $cacert ); curl_setopt( $ch, CURLOPT_CAPATH, $cacert ); $response=curl_exec( $ch ); if( !curl_errno( $ch ) ){ $status=curl_getinfo( $ch, CURLINFO_RESPONSE_CODE ); if( $status==200 ){ $valid[]=$url; $content[ $url ]=$response; if( $break_on_success )break; }else{ $errors[ $status ]=$url; } } $ch=null; } printf('<pre>%s</pre>',print_r($valid,true)); printf('<pre>%s</pre>',print_r($errors,true));

Esto generará la siguiente salida:

 Array ( [0] => https://stackoverflow.com/ [1] => https://developer.mozilla.org [2] => https://stackoverflow.com/questions/70518330/if-statement-with-file-get-contents-to-avoid-403-error [3] => https://www.gumtree.com/ [4] => https://httpstat.us/307 [5] => https://www.farcebook.com ) Array ( [404] => https://developer.mozilla.org/en-US/admin [403] => https://httpstat.us/403 [401] => https://httpstat.us/401 )

Las direcciones URL enumeradas en la primera matriz se han procesado y no devuelven un código de estado http falso, mientras que las de la segunda se pueden ignorar. Si, en lo anterior, establece $break_on_success=true; el código se detendría una vez que se haya encontrado la primera URL para devolver una buena respuesta. El contenido HTML de cada URL se almacena dentro de la matriz $content y se puede procesar posteriormente.

Mencioné usar get_headers para lograr este objetivo. Si bien es posible, existen varias trampas que uno podría encontrar y cualquier código podría terminar siendo más complicado de lo necesario.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda