curl: ne peut pas aller chercher rss de site web en raison de CloudFlare
Je suis notables de se connecter à ce site http://www.youm7.com/newtkarirrss.asp à l'aide de curl sur le serveur
Mais je peux y accéder à partir de localhost sans aucun problème
Voici le test
http://www.tjreb.com/xml_grabber.php?feed=http://www.youm7.com/newtkarirrss.asp&pile=1
Essayer de CNN flux rss
http://www.tjreb.com/xml_grabber.php?feed=http://rss.cnn.com/rss/edition_meast.rss&pile=0
Comment puis-je contourner cette erreur
Voici mon code source
<?php
class xml_grabber
{
private $xml_file = '' ;
private $xml_link = '' ;
private $xml_dom = '' ;
private $xml_type = '' ;
private $xml_content = '' ;
private $xml_errors = array() ;
public $xml_stack = 0 ;
public function __construct($link_file_com = '')
{
if(!$link_file_com)
{
$this->xml_errors['construct'] = 'No Xml In Construct' ;
return false;
}
elseif(!function_exists('simplexml_load_file') || !function_exists('simplexml_load_string') || !function_exists('simplexml_import_dom'))
{
$this->xml_errors['functions'] = 'simple xml function not exists' ;
return false;
}
else
{
$this->set_xml($link_file_com) ;
}
//ini_set('memory_limit', '100M');
}
public function set_xml($xml)
{
if(isset($xml{3}))
{
if(file_exists($xml))
{
$this->xml_type = 1 ;
$this->xml_file = $xml ;
}
elseif(filter_var($xml, FILTER_VALIDATE_URL))
{
$this->xml_type = 2 ;
$this->xml_link = $xml ;
}
else
{
$this->xml_type = 3 ;
$this->xml_dom = $xml ;
}
}
else
{
$this->xml_type = '' ;
}
}
public function get_xml()
{
if($this->xml_type == '')
{
return false ;
}
elseif($this->xml_type == 1)
{
return $this->xml_file ;
}
elseif($this->xml_type == 2)
{
return $this->xml_link ;
}
elseif($this->xml_type == 3)
{
return $this->xml_dom ;
}
}
public function set_columns($new_columns= array())
{
return $this->xml_columns = $new_columns ;
}
public function get_columns()
{
return $this->xml_columns ;
}
public function load()
{
if($this->xml_type == '')
{
$this->xml_errors['loader'] = 'Unknown XML type' ;
return false;
}
elseif($this->xml_type == 1)
{
$dom = simplexml_load_file($this->xml_file,null, LIBXML_NOCDATA) ;
$this->xml_content = $dom ;
}
elseif($this->xml_type == 2)
{
$con = $this->connect($this->xml_link);
if($this->xml_stack == 1)
{
echo $con; die();
}
$this->xml_content = simplexml_load_string($con,null, LIBXML_NOCDATA) ;
}
elseif($this->xml_type == 3)
{
return $this->xml_dom ;
}
}
public function fetch($return = 'array')
{
if($this->xml_content != '')
{
$rss_feed = $this->xml_content ;
$rss_title = (string) $rss_feed->channel->title ;
$rss_link = (string) $rss_feed->channel->link ;
$rss_cat = (string) $rss_feed->channel->category ;
$rss_image = (string) $rss_feed->channel->image->url ;
$rss_summary =
array
(
'info' =>
array(
'title'=>$rss_title ,
'link'=>$rss_link ,
'cat'=>$rss_cat ,
'image'=>$rss_image
) ,
'item' => array()
) ;
foreach($rss_feed->channel->item as $item)
{
if($item->enclosure && $item->enclosure->attributes())
{
$image0 = $item->enclosure->attributes() ;
$image_url = $image0 ['url'] ;
}
$rss_summary['item'][] =
array(
'title' => (string) $item->title ,
'description' => (string) $item->description ,
'link' => (string) $item->link ,
'date' => (string) $item->pubDate ,
'image' => (string) $item->image ,
'image2' => (string) $image0
) ;
}
if($return == 'json')
{
return json_encode($rss_summary) ;
}
elseif($return == 'serialize')
{
return serialize($rss_summary) ;
}
elseif($return == 'xml')
{
return xml_encode($rss_summary) ;
}
else
{
return $rss_summary ;
}
}
else
{
$this->xml_errors['fetch'] = 'No Xml Content' ;
}
}
protected function connect($link)
{
if(!filter_var($link, FILTER_VALIDATE_URL))
{
$this->xml_errors['connect'] = 'Not Vaild Link To Get data' ;
return false ;
}
if(function_exists('curl_init'))
{
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $link);
curl_setopt($cu, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cu, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($cu, CURLOPT_REFERER, "http://www.tjreb.com");
//curl_setopt($cu, CURLOPT_HEADER, true);
//curl_setopt($cu, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($cu, CURLOPT_RETURNTRANSFER, TRUE);
$co = curl_exec($cu) ;
if($co)
{
$con = $co ;
}
else
{
$this->xml_errors['connect'] = 'No Result From Curl' ;
$this->xml_errors['curl'] = curl_error($cu);
}
curl_close($cu) ;
return $con ;
}
if(!$con and function_exists('ini_get'))
{
$url_fopen = ini_get('allow_url_fopen') ;
if($url_fopen == 0)
{
if(function_exists('ini_set'))
{
ini_set('allow_url_fopen', 1) ;
}
$check_fopen = 1 ;
}
else
{
$check_fopen = 0 ;
}
if($check_fopen == 1)
{
$url_fopen = ini_get('allow_url_fopen') ;
}
if($url_fopen == 1)
{
if(function_exists('file_get_contents') and !$con)
{
$con = @file_get_contents($link) ;
if($con)
{
return $con ;
}
else
{
$this->xml_errors['connect'] = 'No Result From file_get_contents' ;
}
}
elseif(function_exists('readfile') and !$con)
{
$con = @readfile($link);
if($con)
{
return $con ;
}
else
{
$this->xml_errors['connect'] = 'No Result From readfile' ;
}
}
elseif(function_exists('file') and !$con)
{
$con = @file($link) ;
if($con)
{
return $con ;
}
else
{
$this->xml_errors['connect'] = 'No Result From file' ;
}
}
}
}
if(!$con)
{
$this->xml_errors['connect'] = 'Curl And Allow Url Fopen Disabled On Server' ;
return false ;
}
}
public function get_error()
{
return $this->xml_errors ;
}
}
if(isset($_GET['feed']))
{
$url = addslashes($_GET['feed']) ;
}
else
{
$url = 'http://rss.cnn.com/rss/edition_meast.rss' ;
}
$fetch = $_GET['fetch'] ;
$stack = $_GET['stack'] ;
$xml = new xml_grabber($url) ;
/*
http://www.youm7.com/new3agelrss.asp
http://www.youm7.com/newtkarirrss.asp
http://www.almasryalyoum.com/rss_feed_term/223241/rss.xml
http://gdata.youtube.com/feeds/api/playlists/18A7E36C33EF4B5D?v=2
http://rss.cnn.com/rss/edition_meast.rss
https://www.facebook.com/feeds/page.php?format=atom10&id=40796308305
https://www.facebook.com/feeds/page.php?format=rss20&id=40796308305
http://www.fwasl.com/feed
https://www.facebook.com/feeds/page.php?format=atom10&id=378156838895039
*/
if(isset($stack))
{
$xml -> xml_stack = intval($stack) ;
}
$res = $xml -> load() ;
$result = $xml -> fetch($fetch) ;
if($result)
{
print_r ( $result ) ;
}
else
{
print_r ( $xml->get_error() ) ;
}
?>
mon projet mujaz.awcore.com
OriginalL'auteur Mona Abdelmajeed | 2012-08-09
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas facilement contourner Cloudflare. Cependant, vous pouvez pirater le système de protection. 🙂
Tout d'abord, d'analyser la page (Cloudflare protection de la page) et de calculer 3+13*7 (la plupart sans doute, cela sera différent pour chaque demande.) dans
Alors envoyer une requête post la même page avec "jschl_vc" valeur de #ChallengeForm de laquelle vous avez été analysée à partir de données et de "jschl_answer" valeur 3+13*7. Et puis essayer de le récupérer à nouveau la page avec la valeur du cookie que Cloudflare ajouté. Lorsque vous avez ajouté Cloudflare liste blanche, vous ne verrez pas que la page plus.
je pense que le serveur doit enregistrer les cookies , mais je ne sais pas comment curl retour des cookies ou de travailler avec elle
jetez un oeil ici: stackoverflow.com/questions/895786/...
J'ai Essayé Ton Idée de re publier des données de roulage et de recevoir un cookie Aucun Résultat de cookie , voici l'url de test tjreb.com/xml_grabber.php?feed=http://www.youm7.com/... je viens d'ajouter quelques informations dans la page , voici l'en-tête parse que j'ai utilisé stackoverflow.com/a/895858/1019618 ... en Attente de Votre Réponse
En fait il retourne une valeur de cookie. Par exemple, la page que vous avez partagé doit être demandé à l' "__cfduid=dae00b9d3a19db1891fb83e3f7fd5d15d1345008603;". (Jetez un oeil au code source de la page) Pourriez vous s'il vous plaît vérifier à nouveau?
OriginalL'auteur burak emre
Vous pouvez passer cloudflare protection avec PhantomJS http://phantomjs.org/
qui peut exécuter le cloudflare JS en dehors d'un navigateur avec peu de script "delay.js":
l'exécuter en tant que
phantomjs delay.js http://protected.url 5000
Cela permet d'obtenir des "protégées.url" et attendre 5000ms pour la cloudflare le code pour charger la page réelle et la déverse sur la sortie standard stdout.
OriginalL'auteur andree
Vous avez besoin de raconter leur site que le navigateur de votre aide.
ex: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624/Netscape 7.1 (ax)
ou utiliser les utilisateurs du navigateur de l'agent à l'aide de la variable $_SERVER['HTTP_USER_AGENT']
Merci @Waygood pour obtenir de l'aide, j'ai utilisé l'option mais Pas de résultat
N'avez pas utilisé Cloudflare donc désolé ce n'aide pas. Heureux @burak-emre a été en mesure de résoudre ce +1
OriginalL'auteur Waygood