Сейчас я работаю над интеграцией Линкедин версии 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
Аналогичный вопрос от SO, которые не решили мою проблему.
Я использовал @
перед путем изображения, как вы сказали, но это мне не помогло. Используется PHP 7
Используйте клиент Жрать 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-запросов и простую интеграцию с веб-сервисами.
Спасибо вам за помощь. Я дам вам знать после проверки этого. Как я могу установить Guzzle в Linux? Вы имеете какое-нибудь представление об этом?
Спасибо за подробности. Я получил ответ.
Вы не загружаете какой-либо файл, вы отправляете только путь к файлу. Префикс пути к файлу с помощью
@
было для загрузки файлов, но это устарело, начиная с PHP 5.5.0, поэтому вам следует использовать php.net/manual/en/class.curlfile.php.