Https Den Veri Çekmek
-
Merhaba arkadaşlar ,
simple html dom ile veri çekerken https bir sayfadan null değer dönüyor. Aşağıdaki gibi curl kodlarıyla çekmeye çalıştığımda ise aşağıdaki gibi şifreli olarak veriyor kodları. Sanırım bot kontrolü var , bunu nasıl aşabiliriz..
<title>xxx - Security Check</title> <style type="text/css">@font-face{font-family:'Roboto Condensed';font-style:normal;font-weight:400;src:local('Roboto Condensed'),local('RobotoCondensed-Regular'),url(data:application/octet-stream;charset=binary;base64,d09GRgABAAAAADOoAA8AAAAATSwAA vs..vs..vs..
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_REFERER, $base);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$str = curl_exec($curl);
curl_close($curl);
$html_code = new simple_html_dom();
$html_code->load($str);Not: Python ile denedim sorunsuz şekilde kodlar çekti (requests modülü) , php den neden sorun çıktı anlamadım...
-
php için ssl sertifikaları tanımlaman gerekir diye düşünmekteyim. phyton script dili olarak geçtiği için windowsta tanımlı olan sertifikaları kullanır fakat php windows sertifikalarını doğrudan kullanamayabilir. php server ayarlarını bir kontrol et duruma göre sertifikalarını yükle sorun çözülür diye düşünmekteyim.
-
hocam büyük ihtimal hata alıyorsun ama görmüyorsun. bu hatayı bypass edebiliyorsun. php'de nasıl bilmiyorum ama .net için:
public void BypassCertificateError()
{
ServicePointManager.ServerCertificateValidationCallback +=
delegate(
Object sender1,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
return true;
};
} -
$agent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7";
coder2 tarafından 08/Kas/16 18:27 tarihinde düzenlenmiştir
$curl = curl_init();
curl_setopt($curl,CURLOPT_AUTOREFERER,1);
curl_setopt($curl,CURLOPT_USERAGENT,$agent);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_REFERER, $base);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$str = curl_exec($curl);
curl_close($curl);
Bu şekilde kullanınca sorun çözüldü -
ek bir bilgide ben yazayım, php curl metoduna googlebot2 yi tanımlarsak ssl e takılmıyorsunuz
-
curl_setopt($ch, CURLOPT_SSLVERSION,3); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
bölümlerini ekliyorsun. https://curl.haxx.se/docs/caextract.html adresinden (ki herhangi bir site değildir. cURL'in kaynağıdır) cacert.pem dosyasını indiriyorsun. Sorunsuz olarak veri çekiyorsun.
