Я создал плагин для сайта WordPress, который я разработал, и он использует CURL для подсчета доли в различных социальных сетях.
Все они, кажется, работают нормально, кроме LinkedIn — я использую следующий код для подсчета:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_URL => 'http://www.linkedin.com/countserv/count/share?url=' . $url . '&format=json'
));
$response = curl_exec($curl);
$results = json_decode($response);
curl_close($curl);
return $results->count;
Любопытно, что это отлично работает на моем промежуточном сервере, но в прямом эфире я ничего не получаю. Я хотел бы, чтобы это было связано с сервером, но тогда тот же код работает для Facebook.
На моем промежуточном сервере я должен был добавить CURLOPT_FOLLOWLOCATION => true
Линия к моему коду, чтобы заставить его работать, но, к сожалению, это не исправило это на живом сервере.
Есть идеи?
Сначала убедитесь, что URL проходит через urlencode
, Он позаботится о проблемах со специальными символами, такими как ?
а также #
,
Вы должны добавить код обработки ошибок, похожий на следующий после curl_exec
вызовите, как для отладки, так и для обеспечения запасного варианта при выходе из строя ошибок.
if(curl_errno($curl))
{
// do something sensible here
echo 'error:' . curl_error($c);
}
Предполагая, что вы предоставляете то же значение для $url
как на стадии подготовки, так и на производстве: ваш код выглядит нормально, за исключением отладки / обработки ошибок и кодирования URL. Вы должны проверить наличие исходящего прокси в вашей действующей сети или сломанных / старых версий PHP / libcurl.
Я полагаю, что произошли изменения в связанных сертификатах SSL.
Вам нужно установить CURLOPT_SSL_VERIFYPEER
в false
так что в вашем примере это будет:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_URL => 'http://www.linkedin.com/countserv/count/share?url=' . $url . '&format=json'
));
$response = curl_exec($curl);
$results = json_decode($response);
curl_close($curl);
return $results->count;
Обычно вы устанавливаете это следующим образом:
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);