图片上传在 Linkedin V2 中不起作用 API
Image upload not working in Linkedin V2 API
我现在正在使用 Linkedin V2 与我的应用程序集成。我在尝试将图片上传到 Linkedin 时遇到问题。
我已经从我的终端尝试 CURL 请求(我正在使用 Ubuntu OS)并得到如下响应:
终端命令(工作&文件上传):
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
Similar question from SO,这并没有解决我的问题。
使用 Guzzle HTTP 客户端而不是 curl.I 尝试了 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');"
composer 更新后,运行 下面的命令安装 Guzzle(默认版本为 3.9,需要 php >= 5.3。3.You 可以根据您的 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 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求并轻松与 Web 服务集成。
- 用于构建查询字符串、POST 请求、流式传输大量上传、流式传输大量下载、使用 HTTP cookie、上传 JSON 数据等的简单界面...
- 可以使用同一接口发送同步和异步请求。
将 PSR-7 接口用于请求、响应和流。这允许您将其他 PSR-7 兼容库与 Guzzle 一起使用。
- 抽象出底层的 HTTP 传输,允许您编写与环境和传输无关的代码;即,不硬依赖 cURL、PHP 流、套接字或非阻塞事件循环。
- 中间件系统允许您扩充和组合客户端行为。
我现在正在使用 Linkedin V2 与我的应用程序集成。我在尝试将图片上传到 Linkedin 时遇到问题。
我已经从我的终端尝试 CURL 请求(我正在使用 Ubuntu OS)并得到如下响应:
终端命令(工作&文件上传):
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
Similar question from SO,这并没有解决我的问题。
使用 Guzzle HTTP 客户端而不是 curl.I 尝试了 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');"
composer 更新后,运行 下面的命令安装 Guzzle(默认版本为 3.9,需要 php >= 5.3。3.You 可以根据您的 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 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求并轻松与 Web 服务集成。
- 用于构建查询字符串、POST 请求、流式传输大量上传、流式传输大量下载、使用 HTTP cookie、上传 JSON 数据等的简单界面...
- 可以使用同一接口发送同步和异步请求。 将 PSR-7 接口用于请求、响应和流。这允许您将其他 PSR-7 兼容库与 Guzzle 一起使用。
- 抽象出底层的 HTTP 传输,允许您编写与环境和传输无关的代码;即,不硬依赖 cURL、PHP 流、套接字或非阻塞事件循环。
- 中间件系统允许您扩充和组合客户端行为。