CURL PHP: загрузка фото в Instagram

Я авторизовался в Instagram, получил все файлы cookie и т. д.

Пришло время сделать запрос на https://www.instagram.com/create/upload/photo/.

В инспекторе Chrome я вижу, что браузер отправляет эти данные публикации (где двоичная фотография, вероятно, является blob):

upload_id: 1539936226445
photo: (binary)
media_type: 1

И настраиваемые заголовки:

x-csrftoken: ACCESS_TOKEN_THAT_I_ALREADY_WROTE_INTO_THE_FILE
x-instagram-ajax: 723425780848
x-requested-with: XMLHttpRequest

Но когда я делаю тот же запрос с использованием cURL (передача сообщений и заголовка, которые я написал выше), я получаю 403 Forbidden, но должен получить 200 Ok с ответом JSON.

Вот как я делаю запрос:

        $this->headers['csrftoken'] = $this->getFileData('csrftoken');
        // generate upload_id for post field
        $uploadId = number_format(round(microtime(true) * 1000), 0, '', ''); 
        // generate binary from image file (maybe not correct)          
        $file_bin = fopen($file, 'rb'); 

        // all my post fields
        $params = array(
            'upload_id' => $uploadId,
            'photo' => $file_bin,
            'media_type' => '1',
        );

        $ch = curl_init('https://www.instagram.com/create/upload/photo/');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_HEADER, true);
        // custom headers
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'x-csrftoken: '.$this->headers['csrftoken'],
            'x-instagram-ajax: '.$this->headers['x-instagram-ajax'],
            'x-requested-with: '.$this->headers['x-requested-with']
        ));

        curl_setopt($ch, CURLOPT_POST, true);
        // post fields
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookieFile);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookieFile);
        curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
        // and finally get 403 forbidden instead of 200 ok with json response
        $result = curl_exec($ch);
        curl_close($ch);

        return $result;

Кто-нибудь знает, где может скрываться проблема?

Большое спасибо за помощь!

попробуйте отправить $params в формате json.

tphobe9312 19.10.2018 11:23

Нет, мужик. Не работает.

Vasily 19.10.2018 11:55

Нет никакого решения? У меня такая же проблема stackoverflow.com/questions/54092335/…

kingingo 10.01.2019 16:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
1 055
1

Ответы 1

Вы должны передать данные своих файлов cookie или запустить другой сеанс внутри кода и отправить файл cookie и csrftoken сеанса.

Другие вопросы по теме