我想检查版本更改/获取带有保管箱上共享链接的文本文件的元数据。我不会使用 dropbox api,因为它会让用户使用自己的帐户。我希望他们链接到我的帐户,但我无法手动执行此操作,因为我稍后可能会更改密码。
所以:没有身份验证令牌,只需从保管箱的共享链接获取元数据,以便我可以检查版本更改,如果版本已更改,则下载新文件的内容。
另外:我也愿意接受其他建议来使这项工作顺利进行。请详细解释一下您的解决方案。
更新的电子标签问题:
public void getFromOnlineTxtDatabase(){
try{
URL url = new URL("url-here");
HttpURLConnection.setFollowRedirects(true);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(false);
con.setReadTimeout(20000);
con.setRequestProperty("Connection", "keep-alive");
//get etag for update check
String etag = con.getHeaderField("etag");
//String etag= "";
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0");
((HttpURLConnection) con).setRequestMethod("GET");
//System.out.println(con.getContentLength()) ;
con.setConnectTimeout(5000);
BufferedInputStream in = new BufferedInputStream(con.getInputStream());
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println(responseCode);
}
StringBuffer buffer = new StringBuffer();
int chars_read;
//int total = 0;
while ((chars_read = in.read()) != -1)
{
char g = (char) chars_read;
buffer.append(g);
}
final String page = buffer.toString();
//create password_ems.txt to internal
if (fileExistance("data.txt")){
File dir = getFilesDir();
File file = new File(dir, "data.txt");
boolean deleted = file.delete();
stringToTxt(page, "data.txt");
}else{
stringToTxt(page, "data.txt");
}
if (fileExistance("data_etag.txt")){
File dir = getFilesDir();
File file = new File(dir, "etag.txt");
boolean deleted = file.delete();
stringToTxt(etag, "etag.txt");
}else{
//create etag_file
stringToTxt(etag, "data_etag.txt");
}
// Log.i("Page", page);
}catch(Exception e){
showDialog("Database Fetch Failure","Unable to Fetch Password Database, check your internet" +
" connection and try again later.",0);
Log.i("Page", "Error");
}
}
如果您执行 HTTPHEAD
针对公共或共享 Dropbox URL 的请求,除其他外,您将获得etag
标头。我不知道这种行为是否得到保证,因为我认为它没有在任何地方记录下来,但至少现在etag
header 可用于确定文件何时发生更改。 (如果etag
不同,文件已更改。)
EDIT
一般来说,使用 ETag 时,最有效的做法是发出GET
请求头为If-None-Match: <old etag>
。如果内容未更改,则会响应 304,但如果内容已更改,则会按照正常方式下载新内容GET
请求(响应将为 200)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)