2017-10-06 137 views
0

我可以使用REST API使用cURLthis一樣的答案。現在我想使用Apache Commons HTTPComponents庫將其「翻譯」爲Java代碼。我只是有麻煩添加API key授權頭:「cURL -u」使用Apache HTTPClient的API密鑰授權

HttpPost request = new HttpPost(DE_COMPILATION_URL); 
byte[] encodedAuth = Base64.encodeBase64(API_KEY.getBytes(StandardCharsets.UTF_8)); 
String authHeader = "Basic " + new String(encodedAuth); 
request.setHeader(HttpHeaders.AUTHORIZATION, authHeader); 
request.setHeader("mode", "raw"); 
request.setHeader("input", "@" + machineCodeFile.toString() + ";filename=" + machineCodeFile.getName()); 
request.setHeader("architecture", "powerpc"); 
request.setHeader("endian", "big"); 
request.setHeader("raw_entry_point", "0x0"); 
request.setHeader("raw_section_vma", "0x0"); 
request.setHeader("target_language", "c"); 

HttpClient client = HttpClientBuilder.create().build(); 
HttpResponse response = client.execute(request); 
String responseBody = EntityUtils.toString(response.getEntity()); 
System.out.println(responseBody); 

此打印:

{ 
    "code": 401, 
    "description": "API key authorization failed (missing or invalid API key).", 
    "message": "Unauthorized by API Key" 
} 

我嘗試不同的片授權代碼,但沒有奏效。可能是什麼問題呢?該API密鑰正確並與cURL一起使用。

回答

0

沒關係,我在最後忘了冒號。它必須包含base64編碼:

HttpPost request = new HttpPost(DE_COMPILATION_URL); 
byte[] encodedAuth = Base64.encodeBase64((API_KEY + ":").getBytes(StandardCharsets.UTF_8)); 
String authHeader = "Basic " + new String(encodedAuth); 
相關問題