Domanda

Sto lavorando all'API ZOHO e sto provando ad aggiornare il record usando cURL.Ho provato diverse varianti di cURL, ma restituisce sempre "false".Ma quando chiamo lo stesso URL utilizzando un browser, funziona.

Esiste un modo per bloccare le richieste cURL?C'è un altro modo per chiamare quell'URL utilizzando un POST o forse una richiesta GET?

Il codice cURL che ho provato è il seguente:

$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);
È stato utile?

Soluzione

I server non possono bloccare le richieste cURL di per sé, ma possono bloccare qualsiasi richiesta che non gradiscono.Se il server verifica alcuni parametri che la tua richiesta cURL non soddisfa, potrebbe decidere di rispondere in modo diverso.

Nella stragrande maggioranza dei casi, questa differenza di comportamento è innescata dalla presenza (o assenza) e dai valori delle intestazioni della richiesta HTTP.Ad esempio, il server potrebbe verificare che l'intestazione User-Agent sia presente e abbia un valore valido (potrebbe anche controllare molte altre cose).

Per scoprire come appare la richiesta HTTP proveniente dal browser, utilizza un proxy di debug HTTP come Fiddler o gli strumenti per sviluppatori del tuo browser.

Per aggiungere le tue intestazioni alla tua richiesta cURL, usa

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

Altri suggerimenti

Molti server web vogliono bloccare le richieste HTTP contraffatte da qualcosa di diverso da un browser, per prevenire abusi dei bot. Se vuoi simulare / fingere la tua richiesta da un browser, devi almeno:

  1. Passa esattamente le stesse intestazioni dei tuoi browser (utilizza ad esempio Firebug per ottenerle)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
  2. Cambia l'agente utente (nome del browser)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    
  3. Abilita i cookie (ad esempio il reindirizzamento e la gestione della sessione)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    
  4. Aggiungi referer

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

E prega di non esserti perso nulla!

Per rispondere alla tua domanda "Esiste un modo per bloccare le richieste CURL?" : Sì, in effetti si può rilevare una richiesta cURL leggendo l'intestazione User-Agent.

Puoi cambiare l'agente utente chiamando curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.

Solo per elaborare un po 'di più su questo, puoi usare curl_setopt ($ ch, CURLOPT_USERAGENT,' Mozilla / 5.0 ');o qualcosa del genere per simulare il programma utente.In questo caso, il server penserebbe che un browser Firefox stia effettuando la richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top