Почему я получаю CLIENT_ERROR при загрузке фотографии в API-интерфейс LinkedIn? - PullRequest
0 голосов
/ 18 марта 2019

Я работаю над созданием обмена изображениями с API LinkedIn v2. В соответствии с документами LinkedIn .

существует три шага.
  1. Зарегистрируйте свое изображение для загрузки.
  2. Загрузите ваше изображение в LinkedIn.
  3. Создание общего ресурса изображения.

После завершения шага 2 я проверяю состояние загрузки с помощью / v2 / assets / {asset-id} и получаю «CLIENT_ERROR». Я понятия не имею, что это значит, и почти ничего не узнал об этом в документах LinkedIn или в Интернете. Это может быть связано с загрузкой двоичного файла изображения, как просит LinkedIn, но, насколько я знаю, я загружаю его.

Edit: php-curl, который я использую для загрузки изображения, ниже. $ UploadUrl получается из регистра изображений (шаг 1.)

    $data = [
        'file' => curl_file_create($file, $mimeType)//;
    ];

    ob_start();
    $out = fopen('php://output', 'w');
    $ch = curl_init($uploadUrl);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, $out);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');

    $authorizationHeader = trim("Authorization: Bearer $accessToken");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
    curl_setopt($ch, CURLOPT_UPLOAD, '1L');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);

    fclose($out);
    $debug = ob_get_clean();
    print_r($debug);

    $resp_obj = json_decode($response);
    print_r($response);
    curl_close($ch);

API активов возвращается:

> GET /v2/assets/{redacted} HTTP/1.1
User-Agent: curl/7.35.0
Host: api.linkedin.com
Accept: */*
Authorization: Bearer {redacted}

< HTTP/1.1 200 OK
< X-LI-ResponseOrigin: RGW
< Content-Type: application/json
< X-RestLi-Protocol-Version: 1.0.0
< Content-Length: 319
< Date: Wed, 20 Mar 2019 14:09:18 GMT
< X-Li-Fabric: prod-ltx1
< Connection: keep-alive
< X-Li-Pop: prod-edc2-nkernB
< X-LI-Proto: http/1.1
< X-LI-UUID: {redacted}
< Set-Cookie: {redacted}
< X-LI-Route-Key: {redacted}

Объект ответа:

(
[serviceRelationships] => Array
    (
        [0] => stdClass Object
            (
                [identifier] => urn:li:userGeneratedContent
                [relationshipType] => OWNER
            )

    )

[recipes] => Array
    (
        [0] => stdClass Object
            (
                [recipe] => urn:li:digitalmediaRecipe:feedshare-image
                [status] => CLIENT_ERROR
            )

    )

[mediaTypeFamily] => STILLIMAGE
[created] => 1553090957146
[lastModified] => 1553090958505
[id] => {redacted}
[status] => ALLOWED
)

Обновление : работает нормально, когда я загружаю изображение с помощью командной строки curl:

curl -i --upload-file {file} --header "Authorization: Bearer {auth}" {url}

Обновление : Решение:

use file_get_contents : curl_setopt ($ ch, CURLOPT_POSTFIELDS, file_get_contents ({путь к вашему изображению)); **

    $ch = curl_init($uploadUrl);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');
    $authorizationHeader = trim("Authorization: Bearer $accessToken");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));
    $response = curl_exec($ch);

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

добавить заголовки Content-Type: application / octet-stream

0 голосов
/ 20 марта 2019

Это: curl_setopt ($ ch, CURLOPT_POSTFIELDS, file_get_contents ({путь к вашему изображению));

    $ch = curl_init($uploadUrl);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.35.0');
    $authorizationHeader = trim("Authorization: Bearer $accessToken");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($authorizationHeader,"Content-Type: {$mimeType}","X-Restli-Protocol-Version: 2.0.0"));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents({path-to-your-image));
    $response = curl_exec($ch);
...