2012-05-24 8 views
6

Ich verwende Multicurl, um Daten von der Remote-Site abzurufen. Mein Skript ist wieWie behandelt man den verbotenen CURL 403-Fehler? irgendwelche Lösungen?

foreach ($urls as $i => $url) { 
      $ch[$i] = curl_init($url['url']); 
      curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0); 
      curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0); 
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false); 
      curl_multi_add_handle($multiCurlHandler, $ch[$i]); 
} 

Es gibt mir 403 verboten als Antwort.

Vielen Dank im Voraus für Anregungen und Kommentare.

+2

Was ist '$ url ['url']'? Dies ist alles über den Remote-Server, es hat sehr wenig mit cURL zu tun. Versuchen Sie, einen Webservice zu konsumieren, schauen Sie sich Webseiten usw. an? – DaveRandom

Antwort

9

Versuchen Sie es einfach, indem Sie zwei Zeilen für Benutzeragenten hinzufügen, und sehen Sie, ob es funktioniert oder nicht. Einige Server akzeptieren die Anforderungen von Skripten nicht, es hängt von Benutzeragenten ab.

// line 1 
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; 

foreach ($urls as $i => $url) { 
    $ch[$i] = curl_init($url['url']); 
    curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0); 
    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0); 

    // line 2 
    curl_setopt($ch[$i], CURLOPT_USERAGENT, $agent); 

    curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false); 
    curl_multi_add_handle($multiCurlHandler, $ch[$i]); 
} 
1

Kontakt wem die Website läuft, zu dem Sie versuchen, eine Verbindung und fragen sie, warum Ihre Anfrage verboten wird.

Sie können dann entweder anhalten (wenn das, was Sie tun, wird von ihnen einfach als inakzeptabel betrachtet) oder ändern Sie die Anfrage so, dass sie ihren Regeln entspricht.

0

Versuchen Sie, die Header Referer und User-Agent einzustellen, aber!

... die Einstellung von CURLOPT_SSL_VERIFYPEER auf false ist gefährlich und sollte niemals in der Produktion erfolgen. Wickeln Sie diese Zeile mindestens in einen is_dev-Check ein.

Sie vereiteln damit den Zweck von SSL, sodass ein Angreifer Ihre Anfrage abfangen und zurückgeben kann, was er möchte, ohne sein SSL-Zertifikat zu verifizieren.

0

Sanjay answer kann immer helfen. Wenn die Client-IP jedoch von der Server-Seite blockiert wird, führt curl auf der Client-Seite ebenfalls diesen Fehler aus.

Verwandte Themen