cURL возвращает ноль - PullRequest
       8

cURL возвращает ноль

0 голосов
/ 14 апреля 2020

Я всегда использовал этот фрагмент кода для получения изображения профиля моего пользователя в Instagram:

$curl = curl_init("https://www.instagram.com/{$_SESSION['instagram']['user']}/?__a=1");

curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$result = json_decode(curl_exec($curl), true);
curl_close($curl);

$_SESSION['instagram']['picture'] = $result['graphql']['user']['profile_pic_url_hd'];

Ответ:

Примечание: попытка получить доступ к смещению массива по значению типа null в ******* в строке **

$_SESSION['instagram']['user'] происходит из вызова API и, повторяя его, я получаю правильное значение.

Даже вручную заменяя $_SESSION['instagram']['user'] на имя пользователя в Instagram, я получаю тот же результат, а при поиске того же URL в Google я получаю правильный JSON ответ.

Этот тот же самый код всегда работал, поэтому я подумал об ошибке в Instagram или о временном «запрете» на слишком много запросов.

Но через несколько дней ничего не изменилось.

Есть идеи?

ОБНОВЛЕНИЕ : curl_setopt($url, CURLOPT_URL, "https://www.instagram.com/{$_SESSION['instagram']['user']}/?__a=1") дает тот же результат

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Вы можете добавить:

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36");

и

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

Иногда это помогает.

Но, по моему мнению, вы должны получить прокси или vpn, чтобы изменить IP-адрес , Также вы можете проверить максимальное количество запросов за раз (посчитать, сколько запросов было отправлено в блок). На некоторых страницах есть например 20 запросов за 1 минуту. После этого вам следует подождать, чтобы разблокировать IP-адрес (например, 1 час).

0 голосов
/ 14 апреля 2020

Ниже фрагмент с CURLOPT_URL отлично работает с моим именем пользователя,

<?php
$username = $_SESSION['instagram']['user'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.instagram.com/$username/?__a=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = json_decode(curl_exec($ch),true);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo $result['graphql']['user']['profile_pic_url_hd'];
?>

ПРИМЕЧАНИЕ: Также я пробовал с вашим фрагментом кода, который кажется работоспособным.

...