Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2022-11-14 GMT+08:00
Listagem de buckets
Cenários
Se você quiser ver informações sobre todos os buckets criados por você mesmo, poderá chamar a API para listar os buckets.
A seguir, descrevemos como chamar a API para listagem de buckets. Para obter detalhes sobre como chamar uma API, consulte Chamada das API.
Pré-requisitos
- Você obteve o AK e SK. Para obter detalhes sobre como obter o AK e o SK, consulte Obtenção de chaves de acesso (AK/SK).
- Você especificou a região onde deseja listar buckets e obteve o endpoint necessário para chamadas de API. Para obter detalhes, consulte Regiões e endpoints.
Obtendo a lista de buckets na região a1
Neste exemplo, um HttpClient Apache é usado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
package com.obsclient; import java.io.*; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.InputStreamEntity; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; public class TestMain { public static String accessKey = "UDSIAMSTUBTEST000012"; //The value of this parameter is the AK obtained. public static String securityKey = "Udsiamstubtest000000UDSIAMSTUBTEST000012"; //The value of this parameter is the SK obtained. public static void main(String[] str) { listAllMyBuckets(); } private static void listAllMyBuckets() { CloseableHttpClient httpClient = HttpClients.createDefault(); String requesttime = DateUtils.formatDate(System.currentTimeMillis()); HttpGet httpGet = new HttpGet("http://obs.a1.myhuaweicloud.com"); httpGet.addHeader("Date", requesttime); /**Calculate the signature based on the request.**/ String contentMD5 = ""; String contentType = ""; String canonicalizedHeaders = ""; String canonicalizedResource = "/"; // Content-MD5 and Content-Type fields do not contain line breaks. The data format is RFC 1123, which is the same as the time in the request. String canonicalString = "GET" + "\n" + contentMD5 + "\n" + contentType + "\n" + requesttime + "\n" + canonicalizedHeaders + canonicalizedResource; System.out.println("StringToSign:[" + canonicalString + "]"); String signature = null; try { signature = Signature.signWithHmacSha1(securityKey, canonicalString); // Added the Authorization: OBS AccessKeyID:signature field to the header. httpGet.addHeader("Authorization", "OBS " + accessKey + ":" + signature); CloseableHttpResponse httpResponse = httpClient.execute(httpGet); // Prints the sending request information and the received response message. System.out.println("Request Message:"); System.out.println(httpGet.getRequestLine()); for (Header header : httpGet.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } System.out.println("Response Message:"); System.out.println(httpResponse.getStatusLine()); for (Header header : httpResponse.getAllHeaders()) { System.out.println(header.getName() + ":" + header.getValue()); } BufferedReader reader = new BufferedReader(new InputStreamReader( httpResponse.getEntity().getContent())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { response.append(inputLine); } reader.close(); // print result System.out.println(response.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } } |
O formato do campo de cabeçalho de Date DateUtils é o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pacote com.obsclient; importar java.text.DateFormat; importar java.text.SimpleDateFormat; importar java.útil.Locale; importação java.útil.TimeZone; classe pública DateUtils public stable String formatDate(long time) { DateFormat ServerDateFormat = new SimpleDateFormat("EEE, dd MMM aaaa HH:mm:ss z", Locale.ENGLISH); serverDateFormat.setTimeZone(TimeZone("GMT")); return serverDateFormat.format(hora); } } |
O método de cálculo da cadeia de caracteres de assinatura é o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.obsclient; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; import java.util.Base64; public class Signature { public static String signWithHmacSha1(String sk, String canonicalString) throws UnsupportedEncodingException { try { SecretKeySpec signingKey = new SecretKeySpec(sk.getBytes("UTF-8"), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(signingKey); return Base64.getEncoder().encodeToString(mac.doFinal(canonicalString.getBytes("UTF-8"))); } catch (NoSuchAlgorithmException | InvalidKeyException | UnsupportedEncodingException e) { e.printStackTrace(); } return null; } } |
Tópico principal: Introdução
Feedback
Esta página foi útil?
Deixar um comentário
Obrigado por seus comentários. Estamos trabalhando para melhorar a documentação.
O sistema está ocupado. Tente novamente mais tarde.