PHP Curl Bot
Merhaba PHP Curl ile myvi.ru dan video linkini çekecek bir bot yapıyodum linki çekiyo ama link çalısmıyor 412 Hatası veriyo bir türlü çözemedim
$ip = $_SERVER["REMOTE_ADDR"];
$url_myvi = 'https://myvi.ru/player/embed/html/oUlblVTa3CpgmoqmcDduJkie3G_7-F0QKcrsKEHGguuGnyl3dia_G0kfNZFjNQOnH0'; // Sayfanın URL'si
$regex_myvi = '/createPlayer\((.*?)\);/'; // Aranacak desen
$ch_myvi = curl_init($url_myvi);
curl_setopt($ch_myvi, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_myvi, CURLOPT_HEADER, true);
curl_setopt($ch_myvi, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch_myvi, CURLOPT_VERBOSE, true);
curl_setopt($ch_myvi, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36");
// curl_setopt($ch_myvi, CURLOPT_REFERER, "https://myvi.ru/");
// curl_setopt($ch_myvi, CURLOPT_PROXY, "162.144.236.128");
// curl_setopt($ch_myvi, CURLOPT_PROXYPORT, '80');
// curl_setopt($ch_myvi, CURLOPT_USERAGENT, "bots");
// curl_setopt($ch_myvi, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt($ch_myvi, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "HTTP_X_FORWARDED_FOR: $ip"));
$content_myvi = curl_exec($ch_myvi);
curl_close($ch_myvi);
if (preg_match($regex_myvi, $content_myvi, $match_myvi)) { // Deseni eşleştir
$result_myvi = $match_myvi[1]; // Eşleşen kısmı al
// echo $result_myvi; // Sonucu ekrana yazdır
} else {
echo 'Desen eşleştirilemedi.'; // Eşleştirme hatası varsa hata mesajı göster
}
$url_myvi_new = $result_myvi;
$url_myvi_new_decode = urldecode($url_myvi_new); // URL'yi kod çözücü fonksiyonla kod çözüyoruz
// $url_myvi_new_clear = str_replace(array('%3a', '%2f'), array(':', '/'), $url_myvi_new_decode); // ":" ve "/" karakterlerini orijinal hallerine geri dönüştürüyoruz
$url_myvi_new_decode = urldecode($url_myvi_new);
echo $url_myvi_new_decode;
echo $url_myvi_new_decode .' <br>'; // düzenlenmiş URL'yi yazdırıyoruz
$link_url_myvi_yunus_baba = $url_myvi_new_decode;
$pattern_myvi_video = '/(?<=v=)(.*)(?=&)(&sig=.*?\ )/';
preg_match($pattern_myvi_video, $link_url_myvi_yunus_baba, $matches_url_org);
$str_myvi_org = $matches_url_org[2];
if (preg_match('/&sig=(.*?)\\\/', $str_myvi_org, $matches_sig_myvi)) {
$sig_value = $matches_sig_myvi[1];
}
$ibo = $matches_sig_myvi[1];
$video_link_org_myvi = $matches_url_org[1] . '&sig=' . $matches_sig_myvi[1];
echo $video_link_org_myvi;
Merhaba,
Bazı video siteleri, engelleme önlemleri olarak, HTTP 412 hata kodu gibi birçok hata kodu kullanabilir. Ancak, kodunuzda 412 hatası olması, bu hatanın sebebini veya bu site özgü bir engelleme politikasının bir nedenini işaret etmektedir.
412 hatası, istekte bulunan sunucunun, istekte belirtilen ön koşulların yerine getirilmediğini belirtmek için bir yanıt olarak gönderdiği bir hata kodudur. Bu ön koşullar, istek başlıklarında belirtilen bazı özellikler veya belirli bir istek metodu olabilir.
Kodu incelediğimde, REMOTE_ADDR ve HTTP_X_FORWARDED_FOR gibi bazı HTTP başlıklarını ayarlamaya çalıştığınızı görüyorum. Ancak öncelikle, bu HTTP başlıklarının yeterli olmayabileceğine ve bu sitelerin engelleme önlemlerinin çok daha sofistike olabileceğine dikkat etmek gerekir.
Site özgü engelleme önlemlerini kırmak adına script yada bot yazmak genellikle hukuka aykırıdır. Bu nedenle, öncelikle video sağlayıcısının API’sını kullanmayı veya kullanıcının sistemindeki uygun resmi uygulamaları kullanmayı deneyebilirsiniz.
Ancak, kodunuzu test etmek ve bir çözüm bulmak için yapabileceğiniz bazı olası adımları şunlar olarak sıralayabilirim:
1- CURLOPT_VERBOSE ayarını devre dışı bırakarak kodunuzu daha az verbose (ayrıntılı) hale getirin.
2- CURLOPT_FOLLOWLOCATION ayarını devre dışı bırakarak, curl’un otomatik yönlendirmeleri takip etmemesini sağlayın.
3- CURLOPT_USERAGENT ayarını, web tarayıcısının varsayılan kullanıcı etkenliğine benzer bir değerle değiştirin.
4- Proxy ayarlarını CURLOPT_PROXY, CURLOPT_PROXYPORT ve CURLOPT_PROXYTYPE ayarları kullanarak değiştirerek, farklı bir IP adresi veya bölge üzerinden deneyin.
5- curl_error() işlevi aracılığıyla curl tarafından döndürülen hatayı yakalayarak, hatayı daha ayrıntılı bir şekilde inceleyin.
Özetle belirtmek gerekirse, 412 hatası almanız, site yapısındaki değişiklikler, engelleme önlemleri veya HTTP isteği nedeniyle oluşabilir. Yukarıdaki önerileri denemenizi öneririm veya mevcut yöntemle uğraşmak yerine, sitenin API’sine erişim sağlamaya çalışın.