Pregunta

Estoy trabajando en la API ZOHO e intento actualizar el registro usando cURL.Probé diferentes variaciones de cURL, pero siempre devuelve "falso".Pero cuando llamo a la misma URL usando un navegador, funciona.

¿Hay alguna forma de que puedan bloquear las solicitudes de cURL?¿Hay alguna otra forma en la que pueda llamar a esa URL usando un POST o tal vez una solicitud GET?

El código cURL que he probado es el 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);
¿Fue útil?

Solución

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

En la gran mayoría de los casos, esta diferencia de 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 averiguar cómo se ve la solicitud HTTP procedente del navegador, utilice un proxy de depuración HTTP como Fiddler o las herramientas de desarrollo de su navegador.

Para agregar sus propios encabezados a su solicitud cURL, use

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

Otros consejos

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

  1. Pase exactamente los mismos encabezados que sus navegadores (use, por ejemplo, Firebug para obtenerlos)

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

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
  3. Habilite las cookies (por ejemplo, la redirección y el manejo de sesiones)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    
  4. Agregar referencias

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

¡Y reza para que no te hayas perdido nada!

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

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

Solo para elaborar un poco más sobre esto, puede usar el curl_setopt ($ CH, CURLOPT_USERAGENT, 'Mozilla / 5.0');o algo así para falsificar al agente de usuario.En este caso, el servidor pensaría que un navegador Firefox estaba haciendo la solicitud.

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