Curl, возвращающий NULL для LinkedIn Share Count Запрос

Я создал плагин для сайта 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 Линия к моему коду, чтобы заставить его работать, но, к сожалению, это не исправило это на живом сервере.

Есть идеи?

1

Решение

Сначала убедитесь, что URL проходит через urlencode, Он позаботится о проблемах со специальными символами, такими как ? а также #,

Вы должны добавить код обработки ошибок, похожий на следующий после curl_exec вызовите, как для отладки, так и для обеспечения запасного варианта при выходе из строя ошибок.

if(curl_errno($curl))
{
// do something sensible here
echo 'error:' . curl_error($c);
}
0

Другие решения

Предполагая, что вы предоставляете то же значение для $url как на стадии подготовки, так и на производстве: ваш код выглядит нормально, за исключением отладки / обработки ошибок и кодирования URL. Вы должны проверить наличие исходящего прокси в вашей действующей сети или сломанных / старых версий PHP / libcurl.

0

Я полагаю, что произошли изменения в связанных сертификатах 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);
0
По вопросам рекламы [email protected]