java - 如何将带有“-i --upload-file”的 curl 调用转换为 java Unirest 或任何其他 http 请求?
问题描述
下面的示例使用 cURL 上传包含为二进制文件的图像文件。
curl -i --upload-file /path/to/image.png --header "Authorization: Token" 'https://url....'
它工作正常。我需要从我的 Java 应用程序发出这个请求。
我试过下一个代码
URL image_url = Thread.currentThread().getContextClassLoader().getResource("jobs_image.jpg");
String path = image_url.getFile();
HttpResponse<String> response = Unirest.post(uploadUrl)
.header("cache-control", "no-cache")
.header("X-Restli-Protocol-Version", "2.0.0")
.header("Authorization", "Bearer " + token + "")
.field("file", new File(path))
.asString();
但是,它返回状态 400 Bad Request。有没有办法从Java调用这样的请求?
这是来自 LinkedIn v2 API 的请求: https ://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin?context=linkedin/consumer/context#upload-image -二进制文件
解决方案
经过几个小时的头撞墙后,我终于弄清楚了如何将 curl 调用转换为RestClient调用(我使用的是 Ruby on Rails)。
我认为您遇到的问题是您必须在请求标头中将 MIME 类型作为 Content-Type 传递。
我正在使用MiniMagick来确定我上传到 LinkedIn 的图像的 MIME 类型。MiniMagick 还可以为您提供 LinkedIn 需要的图像的二进制字符串,因此这是一个双赢的局面。
这是最终奏效的电话:
file = MiniMagick::Image.open(FILE_PATH)
RestClient.post(UPLOAD_URL, file.to_blob, { 'Authorization': 'Bearer TOKEN', 'Content-Type': file.mime_type })
推荐阅读
- java - 如何使用 VSCode 和多个 java 版本
- javascript - 一个对象的几个直接子数组的所有项目如何只映射一次?
- windows - Windows 上的 sed 无法匹配 £ 字符
- c# - 将 AddDbContext 与 Action Delegate(IServiceProvider、DbContextOptionBuilder)一起使用时,Ef 核心迁移停止工作
- python - 获取数据框的子集,其中列必须包含子字符串(如果没有,则忽略这些行)
- google-chrome-extension - Google 使用 Chrome 扩展中的 firebase 登录,可在 Chrome 上运行,但不能在 Edge 上运行
- python - 如何检查单词是否在熊猫数据框中的字典中
- c++ - Winsock 连接很慢
- php - 使用纯 PHP 在特定页面中包含或排除对象
- python - 从 html 文件中获取可读文本的问题