我試圖從Google雲端硬盤中的資源向我的服務器發送推送通知。我一直在尋找這個例子:針對Java的Google雲端硬盤推送通知授權
https://developers.google.com/drive/v3/web/push
我試圖翻譯是對Java弄成這個樣子:
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("id", "36d00d08-000d-4723-91bc-a1a6ec302e59");
map.add("type", "web_hook");
map.add("address", "https://mydomain.appspot.com/rest/drive");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<String> response = restTemplate.postForEntity(uri, request, String.class);
我以前一直在使用谷歌庫的驅動器來訪問文件。在這些情況下,我不需要以這種「手動」方式創建請求。我使用帶有令牌的類GoogleAuthorizationCodeFlow來授權我的請求。我不確定我應該如何使用RestTemplate來做到這一點。我猜我需要做類似的事情:
headers.set("Authorization", X);
X應該在這裏?這是否是正確的方式來處理授權?
編輯:
這是我通過閱讀祕密的嘗試。結果是HTTP 401:
@Override
public String startListening() throws IOException {
final String fileId = "omitted";
String uri = "https://www.googleapis.com/drive/v3/files/" + fileId + "/watch";
HttpHeaders headers = getHeaders(getSecret());
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(getProperties(), headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity(uri, request, String.class);
return response.getStatusCode() + " " + response.getBody() + " " + response.getHeaders();
}
private static HttpHeaders getHeaders(String theString) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + theString);
return headers;
}
private static MultiValueMap<String, String> getProperties() {
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("id", "some uid");
map.add("type", "web_hook");
map.add("address", "https://mydomain.appspot.com/rest/drive");
return map;
}
private static String getSecret() throws IOException {
InputStream in =
ConcreteDriveListenerFactory.class.getResourceAsStream("/drive_secret.json");
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer, "UTF-8");
return writer.toString();
}
訪問令牌可能 – DaImTo
我讀我的訪問令牌和投入的標題(即使用谷歌雲端硬盤的第三方客戶端,可悲的是不支持推送,當工作令牌)。沒有幫助。它可能是別的嗎? –