2014-12-03 3 views
1

Я установил плагин для сайта Wordpress, который я разработал, и он использует CURL, чтобы получать количество акций для различных социальных сетей.Curl Returning NULL для LinkedIn Share Count Request

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

Любые идеи?

+0

Попробуйте выполнить COMAND в баш ... curl --request GET 'your url' – Gregsparrow

+0

Может ли быть, что LinkedIn блокирует запросы Curl (чтобы остановить боты)? Попробуйте настроить собственный заголовок curl, который имитирует обычный браузер. – FeedTheWeb

+0

В настоящее время у меня есть эта проблема - это связано с символом & и любыми другими текстовыми символами в вашем URL-адресе. Если вы проверите свой URL-адрес в браузере, он будет работать, но замените & &, и вы получите ошибку java.lang.NullPointerException 500 из связанного In. Кажется, Linked. Мы больше не хотим, чтобы мы правильно кодировали наши URL-адреса при использовании их API. –

ответ

0

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

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

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

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

0

Был заменен связанным SSL-сертификатам, на которые я верю.

Вам нужно установить CURLOPT_SSL_VERIFYPEER в false, так что в вашем exmaple, что было бы:

$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);