in odps-sdk/odps-sdk-core/src/main/java/com/aliyun/odps/rest/RestClient.java [623:715]
protected Request buildRequest(String resource, String method, Map<String, String> params,
Map<String, String> headers, String endpoint) {
if (resource == null || !resource.startsWith("/")) {
throw new IllegalArgumentException("Invalid resource: " + resource);
}
if (!StringUtils.isNullOrEmpty(prefix)) {
if (prefix.startsWith("/")) {
resource = prefix + resource;
} else {
throw new IllegalArgumentException("Invalid prefix: " + prefix + ", should start with '/'");
}
}
if (endpoint == null) {
throw new IllegalArgumentException("Odps endpoint required.");
}
Request req = new Request(this);
// build URL with parameters
StringBuilder url = new StringBuilder();
url.append(endpoint).append(resource);
if (params == null) {
params = new HashMap<>();
}
if (!params.containsKey("curr_project") && !StringUtils.isNullOrEmpty(defaultProject)) {
params.put("curr_project", defaultProject);
}
if (params.size() != 0) {
req.setParameters(params);
url.append('?');
boolean first = true;
for (Entry<String, String> kv : params.entrySet()) {
if (first) {
first = false;
} else {
url.append('&');
}
String key = kv.getKey();
String value = kv.getValue();
url.append(key);
if (value != null && value.length() > 0) {
value = ResourceBuilder.encode(value);
url.append('=').append(value);
}
}
}
try {
req.setURI(new URI(url.toString()));
req.setMethod(Method.valueOf(method));
Map<String, String> reqHeaders = req.getHeaders();
if (!userDefinedHeaders.isEmpty()) {
reqHeaders.putAll(userDefinedHeaders);
}
if (headers != null) {
reqHeaders.putAll(headers);
}
req.setHeaders(reqHeaders);
// set User-Agent
if (req.getHeaders().get(Headers.USER_AGENT) == null && userAgent != null) {
req.setHeader(Headers.USER_AGENT, userAgent);
req.setHeader(Headers.ODPS_USER_AGENT, userAgent);
}
req.setHeader(Headers.DATE, DateUtils.formatRfc822Date(new Date()));
// Sign the request
account.getRequestSigner().sign(resource, req);
if (appAccount != null) {
appAccount.getRequestSigner().sign(resource, req);
}
if (appStsAccount != null) {
appStsAccount.getRequestSigner().sign(resource, req);
}
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e.getMessage(), e);
}
return req;
}