Added HTTP 1.1 conditional GET support to EepGet.
This commit is contained in:
@ -54,18 +54,18 @@ public class EepGet {
|
|||||||
this(ctx, true, proxyHost, proxyPort, numRetries, outputFile, url);
|
this(ctx, true, proxyHost, proxyPort, numRetries, outputFile, url);
|
||||||
}
|
}
|
||||||
public EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching) {
|
public EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching) {
|
||||||
this(ctx, true, proxyHost, proxyPort, numRetries, outputFile, url, allowCaching);
|
this(ctx, true, proxyHost, proxyPort, numRetries, outputFile, url, allowCaching, null);
|
||||||
}
|
}
|
||||||
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url) {
|
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url) {
|
||||||
this(ctx, false, null, -1, numRetries, outputFile, url);
|
this(ctx, false, null, -1, numRetries, outputFile, url);
|
||||||
}
|
}
|
||||||
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url, boolean allowCaching) {
|
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url, boolean allowCaching) {
|
||||||
this(ctx, false, null, -1, numRetries, outputFile, url, allowCaching);
|
this(ctx, false, null, -1, numRetries, outputFile, url, allowCaching, null);
|
||||||
}
|
}
|
||||||
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url) {
|
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url) {
|
||||||
this(ctx, shouldProxy, proxyHost, proxyPort, numRetries, outputFile, url, true);
|
this(ctx, shouldProxy, proxyHost, proxyPort, numRetries, outputFile, url, true, null);
|
||||||
}
|
}
|
||||||
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching) {
|
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag) {
|
||||||
_context = ctx;
|
_context = ctx;
|
||||||
_log = ctx.logManager().getLog(EepGet.class);
|
_log = ctx.logManager().getLog(EepGet.class);
|
||||||
_shouldProxy = shouldProxy;
|
_shouldProxy = shouldProxy;
|
||||||
@ -79,10 +79,11 @@ public class EepGet {
|
|||||||
_bytesRemaining = -1;
|
_bytesRemaining = -1;
|
||||||
_currentAttempt = 0;
|
_currentAttempt = 0;
|
||||||
_listeners = new ArrayList(1);
|
_listeners = new ArrayList(1);
|
||||||
|
_etag = etag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EepGet [-p localhost:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] url
|
* EepGet [-p localhost:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
@ -91,6 +92,7 @@ public class EepGet {
|
|||||||
int numRetries = 5;
|
int numRetries = 5;
|
||||||
int markSize = 1024;
|
int markSize = 1024;
|
||||||
int lineLen = 40;
|
int lineLen = 40;
|
||||||
|
String etag = null;
|
||||||
String saveAs = null;
|
String saveAs = null;
|
||||||
String url = null;
|
String url = null;
|
||||||
try {
|
try {
|
||||||
@ -103,6 +105,9 @@ public class EepGet {
|
|||||||
} else if (args[i].equals("-n")) {
|
} else if (args[i].equals("-n")) {
|
||||||
numRetries = Integer.parseInt(args[i+1]);
|
numRetries = Integer.parseInt(args[i+1]);
|
||||||
i++;
|
i++;
|
||||||
|
} else if (args[i].equals("-e")) {
|
||||||
|
etag = "\"" + args[i+1] + "\"";
|
||||||
|
i++;
|
||||||
} else if (args[i].equals("-o")) {
|
} else if (args[i].equals("-o")) {
|
||||||
saveAs = args[i+1];
|
saveAs = args[i+1];
|
||||||
i++;
|
i++;
|
||||||
@ -127,7 +132,7 @@ public class EepGet {
|
|||||||
if (saveAs == null)
|
if (saveAs == null)
|
||||||
saveAs = suggestName(url);
|
saveAs = suggestName(url);
|
||||||
|
|
||||||
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), proxyHost, proxyPort, numRetries, saveAs, url);
|
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true, proxyHost, proxyPort, numRetries, saveAs, url, true, etag);
|
||||||
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
|
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
|
||||||
get.fetch();
|
get.fetch();
|
||||||
}
|
}
|
||||||
@ -230,6 +235,7 @@ public class EepGet {
|
|||||||
System.out.println("== Output saved to " + outputFile);
|
System.out.println("== Output saved to " + outputFile);
|
||||||
long timeToSend = _context.clock().now() - _startedOn;
|
long timeToSend = _context.clock().now() - _startedOn;
|
||||||
System.out.println("== Transfer time: " + DataHelper.formatDuration(timeToSend));
|
System.out.println("== Transfer time: " + DataHelper.formatDuration(timeToSend));
|
||||||
|
System.out.println("== ETag: " + _etag);
|
||||||
StringBuffer buf = new StringBuffer(50);
|
StringBuffer buf = new StringBuffer(50);
|
||||||
buf.append("== Transfer rate: ");
|
buf.append("== Transfer rate: ");
|
||||||
double kbps = (1000.0d*(double)(_written)/((double)timeToSend*1024.0d));
|
double kbps = (1000.0d*(double)(_written)/((double)timeToSend*1024.0d));
|
||||||
@ -367,6 +373,10 @@ public class EepGet {
|
|||||||
_out = new FileOutputStream(_outputFile, true);
|
_out = new FileOutputStream(_outputFile, true);
|
||||||
rcOk = true;
|
rcOk = true;
|
||||||
break;
|
break;
|
||||||
|
case 304: // not modified
|
||||||
|
_bytesRemaining = 0;
|
||||||
|
_keepFetching = false;
|
||||||
|
return;
|
||||||
case 416: // completed (or range out of reach)
|
case 416: // completed (or range out of reach)
|
||||||
_bytesRemaining = 0;
|
_bytesRemaining = 0;
|
||||||
_keepFetching = false;
|
_keepFetching = false;
|
||||||
@ -564,9 +574,19 @@ public class EepGet {
|
|||||||
buf.append("Cache-control: no-cache\n");
|
buf.append("Cache-control: no-cache\n");
|
||||||
buf.append("Pragma: no-cache\n");
|
buf.append("Pragma: no-cache\n");
|
||||||
}
|
}
|
||||||
|
if (_etag != null) {
|
||||||
|
buf.append("If-None-Match: ");
|
||||||
|
buf.append(_etag);
|
||||||
|
buf.append("\n");
|
||||||
|
}
|
||||||
buf.append("Connection: close\n\n");
|
buf.append("Connection: close\n\n");
|
||||||
if (_log.shouldLog(Log.DEBUG))
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
_log.debug("Request: [" + buf.toString() + "]");
|
_log.debug("Request: [" + buf.toString() + "]");
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getETag() {
|
||||||
|
return _etag;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user