2017-11-12 3 views
0

Ich versuche, eine Website zu kratzen, und ich bin ein 403 Forbidden Fehler bekommen, egal was ich versuche:Scraping Versuche immer 403 Fehler

  1. wget
  2. ROTATION (Befehlszeile und PHP)
  3. Perl WWW ::
  4. PhantomJS Mechanize

ich alle oben versucht, mit und ohne Proxy, User-Agent ändern, und das Hinzufügen eines Referrer-Header.

Ich kopierte sogar die Anfrage-Header von meinem Chrome-Browser und versuchte, mit meiner Anfrage mit PHP Curl zu senden und ich bekomme immer noch eine 403 Verbotene Fehler.

Irgendwelche Eingaben oder Vorschläge zu dem, was die Website auslöst, um die Anfrage zu blockieren und zu umgehen?

PHP CURL Beispiel:

$url ='https://www.vitacost.com/productResults.aspx?allCategories=true&N=1318723&isrc=vitacostbrands%3aquadblock%3asupplements&scrolling=true&No=40&_=1510475982858'; 
$headers = array(
      'accept:application/json, text/javascript, */*; q=0.01', 
      'accept-encoding:gzip, deflate, br', 
      'accept-language:en-US,en;q=0.9',    
      'referer:https://www.vitacost.com/productResults.aspx?allCategories=true&N=1318723&isrc=vitacostbrands:quadblock:supplements', 
      'user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36', 
      'x-requested-with:XMLHttpRequest', 
); 

$res = curl_get($url,$headers); 
print $res; 
exit; 

function curl_get($url,$headers=array(),$useragent=''){ 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HEADER, true);   
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($curl, CURLOPT_ENCODING, '');    
    if($useragent)curl_setopt($curl, CURLOPT_USERAGENT,$useragent);    
    if($headers)curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 

    $response = curl_exec($curl);  

    $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); 
    $header = substr($response, 0, $header_size); 
    $response = substr($response, $header_size); 


    curl_close($curl); 
    return $response; 
} 

Und hier ist die Antwort, die ich immer erhalten:

<HTML><HEAD> 
<TITLE>Access Denied</TITLE> 
</HEAD><BODY> 
<H1>Access Denied</H1> 

You don't have permission to access  

    "http&#58;&#47;&#47;www&#46;vitacost&#46;com&#47;productResults&#46;aspx&#63;" 
on this server.<P> 
Reference&#32;&#35;18&#46;55f50717&#46;1510477424&#46;2a24bbad 
</BODY> 
</HTML> 
+0

Sie Benutzer Agent falschen Weg einstellen ... sollte 'CURLOPT_USERAGENT' Option verwendet –

+0

@FlashThunder, die" CURLOPT_USERAGENT "-Option ist da und es wird gesetzt, wenn ich die Variable $ useragent senden. Ich habe versucht, die useragent in beide Richtungen, mit der Kopfzeile und "CURLOPT_USERAGENT". Ich glaube nicht, dass das irgendwas zu tun hat, warum das nicht funktioniert. – user735247

Antwort