我正在嘗試使用 ProcessBuilder 執行包含授權標頭的不記名令牌的 curl PUT 請求。ProcessBuilder 如何決議標題的引號存在一些問題,我無法弄清楚如何撰寫 curl 命令。這是命令:
curl -H "Authorization: Bearer <token>" -T kubernetes.hpi -X PUT "https://<url>"
我見過一些不加引號的解決方案,但在這種情況下,標題包含空格,所以這對我不起作用。對于標題,我嘗試過單引號、轉義雙引號、無引號等。
我要么收到 401 錯誤
{
"errors" : [ {
"status" : 401,
"message" : "Unauthorized"
} ]
或者我從 curl 中得到錯誤
curl: (3) URL using bad/illegal format or missing URL
如何撰寫命令以使其與 ProcessBuilder 一起使用?該命令在命令列中作業,但我從使用 ProcessBuilder 的 curl 中得到錯誤。
String deployPath =
String.format(
"%s%s/%s_%s/%s.hpi;ID=%s",
artifactoryLocalRepoUrl,
pluginName,
jenkinsPluginDetail.getPluginVersion(),
currUTCMillis,
pluginName,
jenkinsPluginDetail.getId().toString());
String[] deployArtifactCmd =
new String[] {
"curl",
"-T",
outputPath,
"-X",
"PUT",
deployPath,
"-H",
"\'Authorization: Bearer " bearerToken "\'"
};
logger.info(" Executing deploying plugin {}", pluginName);
ProcessBuilder processBuilder2 =
new ProcessBuilder().inheritIO().command(deployArtifactCmd).redirectErrorStream(true);
logger.info(processBuilder2.command().toString());
try {
Process process = processBuilder2.start();
...
uj5u.com熱心網友回復:
傳遞給的引數ProcessBuilder不應需要引號字符。您的 shell 在將命令列傳遞到curl. 您的最后一個引數有引號,因此請嘗試不使用引號:
"Authorization: Bearer " bearerToken
shell 中需要引號,以便將空格識別為引數值的延續。它們在 Java 中是不必要的,因為您可以在引數陣列中提供帶有空格的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/529132.html
