`
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.junit.Test;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
private static final String DEFAULT_ENCODING = "UTF-8";
private static final String BASE_PATH = "https://api.hmsonline.com";
@Test
public void testPost() throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {
HashMap<String, String> params = new HashMap<String, String>();
params.put("timestamp", "" + System.currentTimeMillis());
params.put("key", "myKey");
System.out.println(post("/v1/search/masterfile", "mysecret", params));
}
private String post(String path, String secret, Map<String, String> params) throws InvalidKeyException,
NoSuchAlgorithmException, UnsupportedEncodingException {
Client c = Client.create();
String paramString = "?";
boolean first = true;
for (String paramKey : params.keySet()) {
if (first) {
paramString = paramString + paramKey + "=" + params.get(paramKey);
first = false;
} else {
paramString = paramString + "&" + paramKey + "=" + params.get(paramKey);
}
}
String context = path + paramString;
String sig = generateSignature(secret, context);
WebResource r = c.resource(BASE_PATH + context + "&signature=" + sig);
System.out.println("POST: " + BASE_PATH + context + "&signature=" + sig);
String result = r.post(String.class, "{\"match_all\":{}}");
return result;
}
public static String generateSignature(String secretKey, String contentTosign) throws NoSuchAlgorithmException,
InvalidKeyException, UnsupportedEncodingException {
byte[] key = Base64.decodeBase64(secretKey);
SecretKeySpec sha1Key = new SecretKeySpec(key, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(sha1Key);
byte[] bytes = mac.doFinal(contentTosign.getBytes(DEFAULT_ENCODING));
return Base64.encodeBase64String(bytes);
}
`