无法使用 JWT 将文件上传到框 - curl:(26) 创建表单帖子数据失败



我在java中使用cURL执行以下命令。这给了我错误 - 紧接着Bearer后的空格.

2019-07-25 08:04:09,297 INFO [com.pc.boxapi.BoxApi:198] - curl: (6) Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"'

curlCommand = "curl https://upload.box.com/api/2.0/files/content  -H "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk" -X POST  -F attributes='{"name":"text.txt","parent":{"id":"69430965158"}}' -F file=@file.txt"";
Process process = Runtime.getRuntime().exec(curlCommand);
LOG.info("process {} ", process.getOutputStream().toString());

如果我在 BearerDdu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk 之间使用正斜杠我收到另一个错误 -

INFO [com.pc.boxapi.BoxApi:198] - curl: (26) failed creating formpost data

服务器是 Linux

根据错误消息Couldn't resolve host 'Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk"',curl 将Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk解析为主机名,这意味着当您显然希望它作为单个参数时,它Authorization:BearerDdu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk作为两个单独的参数接收。

我建议使用 Process.runtime(String[] cmdarray) 方法而不是 Process.runtime(String cmd) ,您将是将命令拆分为多个令牌的人:

String[] curlCommand = { "curl", "https://upload.box.com/api/2.0/files/content",  
    "-H", "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk", "-X", "POST", 
    "-F", "attributes={"name":"text.txt","parent":{"id":"69430965158"}}",
    "-F", "file=@file.txt"
};
Process.runtime(curlCommand);

另请注意,@file.txt引用是相对的:它依赖于当前工作目录中存在file.txt文件(除非更改,否则您执行java代码的文件

(。

curlman页面说错误代码 26 代表 Read error. Various reading problems.

如果你只是打印你尝试执行的命令,你会得到这个:

curl https://upload.box.com/api/2.0/files/content  -H "Authorization:Bearer Ddu9DLiWt2YRWxtsoAxjL0BMMbt9FvOk" -X POST  -F attributes='{"name":"text.txt","parent":{"id":"69430965158"}}' -F file=@file.txt"

读取问题可能与-F file=@file.txt"有关。请注意文件名末尾的额外"。我很确定你的问题就在这里。将其删除并确保file.txt存在。

顺便说一下,如果你需要在Java中发出HTTP请求,你应该使用像Apache HttpClient这样的库。

避免不惜一切代价执行系统命令,这是一个等待附加的安全问题!

最新更新