Учим сниппет FeedX работать через SSL
На днях по работе столкнулся с необходимостью забирать XML с веб-сервиса, парсить его и показывать на сайте. Так как разработка идёт на MODx, то сразу же решил, что для этой задачи буду пользоваться сниппетом FeedX - готовое решение, которое, к тому же неплохо себя зарекомендовало на других проектах. И всё бы ничего, если бы не одно "но". Веб-сервис, с которым предстояло работать, функционирует через SSL протокол, а FeedX его не понимает.
После беглого поиска выяснилось, что с такой задачей либо никто не сталкивался, либо пожадничал делиться решением :) Так или иначе решения я не нашёл и принялся писать своё. Так как ничего особо сложного в нём нет, то и разжёвывать ничего не буду. Берите и пользуйтесь :)
- Модифицируем код сниппета и добавляем в него ещё один параметр - &ssl:
$params['ssl'] = isset($ssl) ? intval($ssl) : 0;
// Set &ssl to 1 for SSL support - Далее редактируем feedx.class.inc.php. В строке 275 находим
// Retrieve and parse feed
и меняем на
if (function_exists('curl_init'))
{
// Use curl to retrieve feed
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->config['url']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $this->config['timeout']);
$xml = curl_exec($curl);
if (curl_errno($curl) !== 0) $success = false; // An error occured
curl_close($curl);
}// Retrieve and parse feed
if (function_exists('curl_init'))
{
if ($this->config['ssl']==1) {
// Use SSL cURL call to retrieve feed
$curl = curl_init();
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_URL,$this->config['url']);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$xml=curl_exec ($curl);
if (curl_errno($curl) !== 0) $success = false; // An error occured
curl_close ($curl);
} else {
// Use curl to retrieve feed
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->config['url']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $this->config['timeout']);
$xml = curl_exec($curl);
if (curl_errno($curl) !== 0) $success = false; // An error occured
curl_close($curl);
}
}