Как сделать автоматический лайкинг фоток в инстаграмме через curl?

Делаю робота для инстаграма, который сам авторизуется и ставить лайки, подписывается, отписывается. Авторизацию сделал, сохранился cookies, где есть sessionid, csrftoken, mid, target_sig, target, ds_user_id. Когда запускаю функцию лайкинга то все это исчезает и остается только csrftoken и mid.
вот код лайкинга.
$chl = curl_init();

curl_setopt($chl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36");
curl_setopt($chl, CURLOPT_HEADER, true);
curl_setopt($chl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($chl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($chl, CURLOPT_ENCODING, "gzip, deflate");

curl_setopt($chl, CURLOPT_COOKIEJAR, Yii::getAlias('@webroot').'/cookies/'.$login.'.txt');
curl_setopt($chl, CURLOPT_URL, "https://instagram.com/web/likes/$id/like/");
curl_setopt($chl, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_POSTFIELDS, "X-Instagram-AJAX=1&X-Requested-With=XMLHttpRequest&X-CSRFToken=".$cookie);
curl_setopt($chl, CURLOPT_REFERER, $data->link."?taken-by=".$data->user->username);
curl_setopt( $chl, CURLOPT_HTTPHEADER, array(
'X-CSRFToken: '.$cookie,
'X-Instagram-AJAX: 1',
'X-Requested-With: XMLHttpRequest',
));
$response = curl_exec($chl);
  • Вопрос задан
  • 1582 просмотра
Пригласить эксперта
Ответы на вопрос 1
@beatleboy
Столкнулся с подобной проблемой, впервую очередь отключите CURLOPT_FOLLOWLOCATION, instagram делает редиректы через Location, curl их исполняет но куки не выставляет. Я сделал так:
CURLOPT_FOLLOWLOCATION, 0
.....
ist($headers, $response) = explode("\r\n\r\n", $this->last_response, 2);
if(strlen($response) < 5){
      $response = NULL;
}
$header_info['location'] = NULL;
$headers = explode("\n", $headers);
foreach($headers as $header) {
	if (stripos($header, 'Location:') !== false) 
		 $header_info['location'] = trim(preg_replace('/Location: /', '', $header) );
}
	            
return array('response' => $response, 'header' => $header_info);

Это кусок кода из библиотеки Curl для Codeigniter 3
В итоге у меня имеется Location, по нему я делаю новый curl и если опять есть location то повторяю действия (обычный цикл до тех пор пока нет location).
Таким образом я эмитирую получение пользовательского токена для API инстаграм, на все уходит 3 цикла.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы