2012-05-24 33 views
6

Estoy usando multi curl para obtener datos del sitio remoto. Mi secuencia de comandos es como¿Cómo lidiar con CURL 403 prohibido error? alguna solución?

foreach ($urls as $i => $url) { 
      $ch[$i] = curl_init($url['url']); 
      curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0); 
      curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0); 
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false); 
      curl_multi_add_handle($multiCurlHandler, $ch[$i]); 
} 

Me devuelve 403 prohibido en respuesta.

Gracias de antemano por sus sugerencias y comentarios.

+2

¿Qué es '$ url ['url']'? Esto es todo sobre el servidor remoto, tiene muy poco que ver con cURL. ¿Estás tratando de consumir un servicio web, mirar páginas web, etc.? – DaveRandom

Respuesta

9

Intente agregar dos líneas para los agentes de usuario, y vea si funciona o no. Algunos servidores no aceptan las solicitudes de las secuencias de comandos, depende de los agentes de usuario.

// line 1 
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; 

foreach ($urls as $i => $url) { 
    $ch[$i] = curl_init($url['url']); 
    curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0); 
    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0); 

    // line 2 
    curl_setopt($ch[$i], CURLOPT_USERAGENT, $agent); 

    curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false); 
    curl_multi_add_handle($multiCurlHandler, $ch[$i]); 
} 
1

Póngase en contacto con quienquiera que ejecute el sitio que está intentando conectar y pregúnteles por qué su solicitud está prohibida.

Puede detenerse (si lo que está haciendo simplemente lo consideran inaceptable) o cambiar la solicitud para que cumpla con sus reglas.

0

Intente configurar los encabezados Referer y User-Agent, pero!

... el ajuste de CURLOPT_SSL_VERIFYPEER en falso es peligroso y nunca se debe hacer en producción. Envuelve esa línea en un cheque is_dev de algún tipo como mínimo.

Está derrotando el propósito de SSL al hacerlo, permitiendo que un atacante intercepte su solicitud y devuelva lo que quiera sin verificar su certificado SSL.

0

Sanjay's answer siempre pueden ayudar. Pero cuando la IP del cliente está bloqueada por el lado del servidor, ejecutar curl en el lado del cliente también obtiene este error.

Cuestiones relacionadas