Frage

Ich arbeite an der ZOHO-API und versuche, den Datensatz mit cURL zu aktualisieren.Ich habe verschiedene cURL-Variationen ausprobiert, aber es wird immer "false" zurückgegeben.Aber wenn ich dieselbe URL mit einem Browser aufrufe, funktioniert es.

Gibt es eine Möglichkeit, cURL-Anforderungen zu blockieren?Gibt es eine andere Möglichkeit, diese URL über einen POST oder eine GET-Anfrage aufzurufen?

Der von mir versuchte cURL-Code lautet wie folgt:

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

War es hilfreich?

Lösung

Server können cURL-Anforderungen nicht per se blockieren, aber sie können jede Anforderung blockieren, die ihnen nicht gefällt.Wenn der Server nach Parametern sucht, die Ihre cURL-Anforderung nicht erfüllt, reagiert er möglicherweise anders.

In den allermeisten Fällen wird dieser Unterschied im Verhalten durch das Vorhandensein (oder Fehlen) und die Werte der HTTP-Anforderungsheader ausgelöst.Beispielsweise kann der Server überprüfen, ob der User-Agent-Header vorhanden ist und einen gültigen Wert hat (er kann auch viele andere Dinge überprüfen).

Um herauszufinden, wie die vom Browser kommende HTTP-Anfrage aussieht, verwenden Sie einen HTTP-Debugging-Proxy wie Fiddler oder die Entwicklertools Ihres Browsers.

Verwenden Sie , um Ihrer cURL-Anforderung eigene Header hinzuzufügen

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

Andere Tipps

Viele Webserver möchten HTTP-Anforderungen blockieren, die von etwas anderem als einem Browser gefälscht wurden, um Bots-Missbrauch zu verhindern. Wenn Sie Ihre Anfrage über einen Browser simulieren / vortäuschen möchten, müssen Sie mindestens:

  1. Übergeben Sie genau die gleichen Header wie Ihre Browser (verwenden Sie z. B. Firebug , um sie abzurufen)

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

  2. Ändern Sie den Benutzeragenten (Name des Browsers)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    

  3. Cookies aktivieren (z. B. Umleitung und Sitzungsbehandlung)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    

  4. Verweise hinzufügen

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

    Und bete, dass du nichts verpasst hast!

Um Ihre Frage zu beantworten "Gibt es eine Möglichkeit, CURL-Anforderungen zu blockieren?" : Ja, tatsächlich kann eine CURL-Anforderung durch Lesen des User-Agent-Headers erkannt werden.

Sie können den Benutzeragenten ändern, indem Sie curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!'); aufrufen.

Um dies etwas näher zu erläutern, können Sie curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 5.0') verwenden.oder so ähnlich, um den Benutzeragenten zu fälschen.In diesem Fall würde der Server glauben, dass ein Firefox-Browser die Anforderung stellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top