2012-02-22 13 views
10

Pracuję nad interfejsem API ZOHO i próbuję zaktualizować rekord za pomocą CURL. Próbowałem różnych wersji CURL, ale zawsze zwraca "false". Ale kiedy zadzwonię pod ten sam URL za pomocą przeglądarki, to działa.
Czy istnieje sposób blokowania żądań CURL? Czy istnieje inny sposób, w jaki mogę nazwać ten URL za pomocą POSt lub może być GET? Spędziłem prawie 2-3 dni. Jeśli jesteś użytkownikiem ZOHO API, możesz pokazać mi kod, który zadziałał dla ciebie?Czy serwery mogą blokować żądania zwijania?

Najnowsze curl Starałem się jak poniżej:

$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); 

Odpowiedz

10

Serwery nie mogą blokować żądań zwijania jako takich, ale mogą blokować dowolne żądanie, które im się nie podoba. Jeśli serwer sprawdza niektóre parametry, które nie spełniają Twoich żądań zwijania, może podjąć decyzję o odmiennej odpowiedzi.

W zdecydowanej większości przypadków ta różnica w zachowaniu jest wyzwalana przez obecność (lub brak) i wartości nagłówków żądań HTTP. Na przykład serwer może sprawdzić, czy nagłówek User-Agent jest obecny i ma poprawną wartość (może również sprawdzić wiele innych rzeczy).

Aby dowiedzieć się, jak wygląda żądanie HTTP pochodzące z przeglądarki, użyj serwera proxy debugowania HTTP, takiego jak Fiddler lub narzędzi programistycznych przeglądarki.

Aby dodawać własne nagłówki do curl wniosek, stosować

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

Zgadzam się z wyrażeniem ur "parametrami, których nie spełnia twoje żądanie zwijania", ale w oficjalnej dokumentacji nie wspomniano nic takiego. I jeszcze jedno: tam API musi być wywołane przez HTTPS .... CURL zarządza wewnętrznie, czy muszę dodać coś więcej do obsługi HTTPS? –

+0

@AmitPatil: Tak, curl robi HTTPS.Naprawdę nie mogę mówić o ZOHO API, nigdy nawet nie patrzyłem na to. – Jon

+0

* "W ogromnej większości przypadków ta różnica w zachowaniu jest wyzwalana przez obecność (lub nieobecność) i wartości nagłówków żądań HTTP" * Nowoczesne żądania fałszerzy bloków są o wiele mądrzejsze od tych w dzisiejszych czasach, imho. –

5

Aby odpowiedzieć na to pytanie „Czy istnieje jakiś sposób mogą blokować żądania CURL?”: Tak, w rzeczywistości można wykryć żądanie cURL, czytając nagłówek User-Agent.

Możesz zmienić agenta użytkownika dzwoniąc pod numer curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.

15

Wiele serwerów internetowych chcą blokować żądania HTTP kute przez coś innego niż przeglądarce, aby zapobiec nadużyciom boty. Jeśli chcesz symulować/udawać żądania z przeglądarki, to przynajmniej trzeba:

  1. zdać te same nagłówki niż przeglądarek (wykorzystanie tj Firebug je zdobyć)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    
  2. Zmień agenta użytkownika (nazwa przeglądarce)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
    
  3. Włącz ciasteczka (na przykład przekierowania i obsługi sesji)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
    
  4. Dodaj odsyłających

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

i modlić się, że nie mają niczego przegapić!

Powiązane problemy