Загрузка изображения не работает в Linkedin V2 API

Сейчас я работаю над интеграцией Линкедин версии 2 с моим приложением. Я столкнулся с проблемой при попытке загрузить изображение в Linkedin.

Я попробовал CURL-запрос со своего терминала (я использую ОС Ubuntu) и получил ответ, как показано ниже:

Команда терминала (работает и файл загружен):

curl -i --upload-file /Users/peter/Desktop/superneatimage.png --header "Authorization: Bearer redacted" 'https://api.linkedin.com/mediaUpload/C5522AQGTYER3k3ByHQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJbrN86Zm265gAAAWemyz2pxPSgONtBiZdchrgG872QltnfYjnMdb2j3A&app=1953784&sync=0&v=beta&ut=2H-IhpbfXrRow1'

Это ответ, как показано ниже:

HTTP/2 201 date: Wed Apr 10 09:14:44 UTC 2019 server: Play set-cookie: lang=v=2&lang=en-us; Path=/; Domain=api.linkedin.com x-ambry-creation-time: Wed Apr 10 09:14:44 UTC 2019 access-control-allow-origin: https://www.linkedin.com content-length: 0

я столкнулся с проблемой, когда я интегрирую запрос CURL в свое приложение. Мой код запроса CURL из моего приложения приведен ниже.

$headers = array();
$headers[] = 'Authorization: Bearer xxxxx';
$headers[] = 'X-Restli-Protocol-Version: 2.0.0';
$headers[] = 'Content-Type: multipart/form-data';
$ch = curl_init();
$options = array(
    CURLOPT_HEADER => true,
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'https://api.linkedin.com/mediaUpload/C5522AQGTYER3k3ByHQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJbrN86Zm265gAAAWemyz2pxPSgONtBiZdchrgG872QltnfYjnMdb2j3A&app=1953784&sync=0&v=beta&ut=2H-IhpbfXrRow1',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => array("upload-file" => '/Users/peter/Desktop/superneatimage.png')
    // CURLOPT_POSTFIELDS => array("upload-file" => new CURLFile('/Users/peter/Desktop/superneatimage.png'))
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
print_r($response);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Ответ как:

HTTP/1.1 400 Bad Request Server: Play Set-Cookie: lang=v=2&lang=en-us; Path=/; Domain=api.linkedin.com Date: Wed, 10 Apr 2019 09:16:25 GMT Content-Length: 0 X-Li-Fabric: prod-lsg1 Connection: keep-alive

Ссылка на документ Linkedin

Аналогичный вопрос от SO, которые не решили мою проблему.

Вы не загружаете какой-либо файл, вы отправляете только путь к файлу. Префикс пути к файлу с помощью @было для загрузки файлов, но это устарело, начиная с PHP 5.5.0, поэтому вам следует использовать php.net/manual/en/class.curlfile.php.

04FS 10.04.2019 11:50

Я использовал @ перед путем изображения, как вы сказали, но это мне не помогло. Используется PHP 7

Sinto 10.04.2019 11:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
2
2
1 076
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте клиент Жрать HTTP вместо curl. Я пробовал curl, но он не работает.

Сначала установите композитор в текущий каталог с помощью следующей команды:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

После обновления композитора выполните приведенную ниже команду, чтобы установить Guzzle (версия по умолчанию будет 3.9, для нее требуется php >= 5.3.3. Вы можете указать на основе вашей версии php):

php composer.phar require guzzlehttp/guzzle

Once Guzzle client installed successfully.Please use the below code to upload the file

    require 'vendor/autoload.php';
    $client =new \GuzzleHttp\Client();
    $image_path='/path_to_your_image/my_image.png';
    $result=$client->request('PUT',$target_url, [
             'headers' => [
                 'Authorization' => 'Bearer ' . $token
              ],
              'body' => fopen($image_path, 'r'),
    
        ]);

Вы получите полный ответ ниже успеха

HTTP/2 201

date: Wed Apr 10 09:14:44 UTC 2019 server: Play set-cookie: lang=v=2&lang=en-us; Path=/; Domain=api.linkedin.com x-ambry-creation-time: Wed Apr 10 09:14:44 UTC 2019 access-control-allow-origin: https://www.linkedin.com content-length: 0

Guzzle — HTTP-клиент PHP., что упрощает отправку HTTP-запросов и простую интеграцию с веб-сервисами.

  • Простой интерфейс для создания строк запросов, POST-запросов, потоковой передачи больших загрузок, потоковой передачи больших загрузок, использования файлов cookie HTTP, загрузки данных JSON и т. д.
  • Может отправлять как синхронные, так и асинхронные запросы, используя один и тот же интерфейс. Использует интерфейсы PSR-7 для запросов, ответов и потоков. Это позволяет вам использовать другие совместимые с PSR-7 библиотеки с Guzzle.
  • Абстрагирует базовый HTTP-транспорт, позволяя писать код, не зависящий от среды и транспорта; т. е. нет жесткой зависимости от cURL, потоков PHP, сокетов или неблокирующих циклов событий.
  • Система промежуточного программного обеспечения позволяет дополнять и формировать поведение клиента.

Спасибо вам за помощь. Я дам вам знать после проверки этого. Как я могу установить Guzzle в Linux? Вы имеете какое-нибудь представление об этом?

Sinto 11.04.2019 11:12

Спасибо за подробности. Я получил ответ.

Sinto 11.04.2019 11:55

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