Хорошо, так что это моя проблема. Чтобы поделиться сообщением с изображением с помощью linkedin api, сначала необходимо зарегистрировать файл изображения, сделав это с помощью почтового запроса, в котором вы отправляете свой двоичный файл.Затем вы используете изображение URN в исходном запросе, чтобы отправить свой пост.Мой запрос проходит, возвращает код 201 (который должен быть успешным запросом), но в итоге не публикует изображение или текст.Если я пытаюсь опубликовать только текст, это работает.Я попытался зарегистрировать свое изображение с помощью curl, и оно было опубликовано на linkedin, поэтому я думаю, что неправильно отправляю двоичный файл в запросе, это мой запрос:
HttpClient client = HttpClientBuilder.create().build();
HttpPut request = new HttpPut(uploadUrl);
request.addHeader("Content-Type", "data/binary");
request.setHeader("X-Restli-Protocol-Version", "2.0.0");
request.setHeader("Authorization", "Bearer " + myToken);
File file = new File(pictureUrl);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("upload-file", file);
request.setEntity(builder.build());
HttpResponse response = client.execute(request);
Я получаю код 201с этим кодом, но он по-прежнему не публикуется.Это пример curl-запроса, который они дают на Share API doc .
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'
Можете ли вы сказать мне, что не так с моим эквивалентом Java?
Редактировать: Забыл сказать, что я даже пытался вызвать curl из Java, тот же код, который я использовал в терминале, иэто все еще не работало ..
Process p;
try {
p = Runtime.getRuntime().exec("curl -i --upload-file" + " " + pictureUrl + " " + "--header \"Authorization: Bearer " + myToken + "\" '" + uploadUrl + "'");
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
String outputController = "";
while ((line = reader.readLine()) != null) {
outputController = outputController + '\n' + line;
}
System.out.println("out: ");
System.out.println(outputController);
return true;
} catch (IOException | InterruptedException ex) {
return false;
}
Выход вернул пустую строку.
Edit2: Еще одна забавная вещь, когда я выполняю основной запрос, в котором я отправляю текст, имедиа-урны, которые я получаю после отправки изображений, я снова получаю 201, как будто это успешно, и в ответ я даже получаю идентификатор сообщения.Затем я пытаюсь использовать другую конечную точку API и извлекать это сообщение, используя идентификатор, полученный из ответа, и я получаю все данные, как сообщение опубликовано.В json даже говорится, что я получаю, что жизненный цикл ИЗДАН и статус СМИ ГОТОВ.Единственное, что отличается от json-сообщения с изображением, которое находится на linkedin, - это то, что у медиа-объекта есть миниатюры, а в этом случае их нет, это просто пустой массив json.