cURL PHP: загрузка фотографий в Instagram - PullRequest
0 голосов
/ 19 октября 2018

Я авторизовался в Instagram, получил все куки и т. Д.

Теперь пришло время сделать запрос на 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 (передача сообщений и заголовка, который я написал выше), яget 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;

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

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

1 Ответ

0 голосов
/ 08 ноября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...