2012-02-22 17 views
10

Estoy trabajando en ZOHO API, e intento actualizar el registro usando CURL. Intenté diferentes variaciones de CURL pero siempre devuelve "falso". Pero cuando llamo a la misma URL usando un navegador, funciona.
¿Hay alguna manera de que puedan bloquear solicitudes de CURL? ¿Hay alguna otra forma en que pueda llamar a esa URL usando POSt o GET también puede hacerlo? Pasé casi 2-3 días. Si es usuario de la API de ZOHO, ¿puede mostrarme el código que funcionó para usted?¿Pueden los servidores bloquear solicitudes curl?

rizo recientes he intentado es la siguiente:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 

Respuesta

10

Los servidores no pueden bloquear las solicitudes curl per se, pero pueden bloquear cualquier solicitud que no les guste. Si el servidor comprueba algunos parámetros que su solicitud curl no satisface, podría decidir responder de manera diferente.

En la gran mayoría de los casos, esta diferencia en el comportamiento se desencadena por la presencia (o ausencia) y los valores de los encabezados de solicitud HTTP. Por ejemplo, el servidor puede verificar que el encabezado User-Agent esté presente y tenga un valor válido (también podría verificar muchas otras cosas).

Para saber cómo se ve la solicitud HTTP proveniente del navegador, use un proxy de depuración HTTP como Fiddler o las herramientas de desarrollo de su navegador.

Para añadir sus propias cabeceras a su solicitud rizo, utilice

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName: HeaderValue')); 
+0

Acepta los "parámetros que tu solicitud curl no satisface", pero en la documentación oficial, no mencionaron nada. Una cosa más, hay API que se debe llamar a través de HTTPS ... CURL administra internamente o tengo que agregar algo más para tratar con HTTPS? –

+0

@AmitPatil: Sí, curl hace HTTPS.Realmente no puedo hablar sobre la API de ZOHO, nunca la he visto. – Jon

+0

* "En la gran mayoría de los casos, esta diferencia en el comportamiento se desencadena por la presencia (o ausencia) y los valores de los encabezados de solicitud HTTP" * Los bloqueadores de forges de solicitud modernos son mucho más inteligentes que los actuales, imho. –

5

Para responder a su pregunta "¿Hay alguna manera de que puedan bloquear las solicitudes CURL?": Sí, de hecho, uno puede detectar una solicitud de cURL al leer el encabezado User-Agent.

Puede cambiar el agente de usuario llamando al curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.

15

Muchos servidores web quieren bloquear peticiones HTTP forjadas por algo más que un navegador, para evitar abusos bots. Si desea simular/fingir su solicitud desde un navegador, que al menos tiene que:

  1. Pase exactamente las mismas cabeceras de sus navegadores (uso es decir Firebug para conseguirlos)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    
  2. cambiar el agente de usuario (nombre del navegador)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    
  3. activa las cookies (por ejemplo, cambio de dirección y manejo de sesión)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
    
  4. Añadir referers

    curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); 
    curl_setopt($curl, CURLOPT_AUTOREFERER, true); 
    

y rezar no se ha perdido nada!

Cuestiones relacionadas