Package net.i2p.util
Class EepGet
- java.lang.Object
-
- net.i2p.util.EepGet
-
- Direct Known Subclasses:
EepHead
,I2PSocketEepGet
,PartialEepGet
,SSLEepGet
public class EepGet extends Object
EepGet [-p 127.0.0.1:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] url
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
EepGet.AUTH_MODE
protected class
EepGet.AuthState
Manage the authentication parameters Ref: RFC 2617 Supports both Basic and Digest, however i2ptunnel HTTP proxy has migrated all previous Basic support to Digest.protected class
EepGet.CLIStatusListener
protected class
EepGet.Gunzipper
Decompressor thread.static interface
EepGet.StatusListener
Callback interface
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_aborted
protected String
_actualURL
the URL we actually fetch from (may differ from the _url in case of redirect)protected long
_alreadyTransferred
protected EepGet.AuthState
_authState
protected long
_bytesRemaining
protected long
_bytesTransferred
protected String
_contentType
protected I2PAppContext
_context
protected int
_currentAttempt
protected IOException
_decompressException
protected boolean
_encodingChunked
protected String
_etag
protected String
_etagOrig
protected List<String>
_extraHeaders
protected int
_fetchHeaderTimeout
protected int
_fetchInactivityTimeout
protected int
_fetchTotalTimeout
protected boolean
_isGzippedResponse
protected boolean
_keepFetching
protected String
_lastModified
protected String
_lastModifiedOrig
protected List<EepGet.StatusListener>
_listeners
protected Log
_log
protected boolean
_notModified
protected int
_numRetries
protected OutputStream
_out
protected String
_outputFile
protected OutputStream
_outputStream
protected Socket
_proxy
protected String
_proxyHost
protected InputStream
_proxyIn
protected OutputStream
_proxyOut
protected int
_proxyPort
protected String
_redirectLocation
protected int
_redirects
protected int
_responseCode
protected String
_responseText
protected boolean
_shouldProxy
protected boolean
_shouldWriteErrorToOutput
protected boolean
_transferFailed
protected String
_url
url we were asked to fetchprotected static int
CONNECT_TIMEOUT
protected static int
INACTIVITY_TIMEOUT
protected static int
MAX_COMPLETE_FAILS
maximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14protected static String
USER_AGENT
this will be replaced by the HTTP Proxy if we are using it
-
Constructor Summary
Constructors Constructor Description EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String postData)
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String lastModified, String postData)
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag)
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag, String lastModified)
EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, String postData)
EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url)
EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url, boolean allowCaching)
EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addAuthorization(String userName, String password)
Add basic authorization header for the proxy.void
addHeader(String name, String value)
Add an extra header to the request.void
addStatusListener(EepGet.StatusListener lsnr)
protected void
doFetch(SocketTimeout timeout)
This reads the response to a single fetch.boolean
fetch()
Blocking fetch, returning true if the URL was retrieved, false if all retries failed.boolean
fetch(long fetchHeaderTimeout)
Blocking fetch, timing out individual attempts if the HTTP response headers don't come back in the time given.boolean
fetch(long fetchHeaderTimeout, long totalTimeout, long inactivityTimeout)
Blocking fetch.String
getContentType()
After fetch, the received value from the server, or null if none.String
getETag()
After fetch, the received value from the server, or null if none.String
getLastModified()
After fetch, the received value from the server, or null if none.boolean
getNotModified()
protected String
getRequest()
int
getStatusCode()
The server response (200, etc).String
getStatusText()
The server text ("OK", "Not Found", etc).static void
main(String[] args)
EepGet [-p 127.0.0.1:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url As of 0.9.45, supports https and redirect to httpsstatic Map<String,String>
parseAuthArgs(String args)
Parse the args in an authentication header.protected long
readChunkLength()
TODO this does not skip over chunk extensions (RFC 2616 sec.protected void
readHeaders()
protected void
sendRequest(SocketTimeout timeout)
void
setWriteErrorToOutput()
If called (before calling fetch()), data from the server or proxy will be written to the output file or stream even on an error response code (4xx, 5xx, etc).protected boolean
shouldReadBody()
Should we read the body of the response?void
stopFetching()
static String
suggestName(String url)
Parse URL for a viable filename.
-
-
-
Field Detail
-
_context
protected final I2PAppContext _context
-
_log
protected final Log _log
-
_shouldProxy
protected final boolean _shouldProxy
-
_proxyHost
protected final String _proxyHost
-
_proxyPort
protected final int _proxyPort
-
_numRetries
protected final int _numRetries
-
_outputFile
protected final String _outputFile
-
_outputStream
protected final OutputStream _outputStream
-
_url
protected final String _url
url we were asked to fetch
-
_actualURL
protected String _actualURL
the URL we actually fetch from (may differ from the _url in case of redirect)
-
_listeners
protected final List<EepGet.StatusListener> _listeners
-
_keepFetching
protected boolean _keepFetching
-
_proxy
protected Socket _proxy
-
_proxyOut
protected OutputStream _proxyOut
-
_proxyIn
protected InputStream _proxyIn
-
_out
protected OutputStream _out
-
_alreadyTransferred
protected long _alreadyTransferred
-
_bytesTransferred
protected long _bytesTransferred
-
_bytesRemaining
protected long _bytesRemaining
-
_currentAttempt
protected int _currentAttempt
-
_responseCode
protected int _responseCode
-
_responseText
protected String _responseText
-
_shouldWriteErrorToOutput
protected boolean _shouldWriteErrorToOutput
-
_etag
protected String _etag
-
_lastModified
protected String _lastModified
-
_etagOrig
protected final String _etagOrig
-
_lastModifiedOrig
protected final String _lastModifiedOrig
-
_encodingChunked
protected boolean _encodingChunked
-
_notModified
protected boolean _notModified
-
_contentType
protected String _contentType
-
_transferFailed
protected boolean _transferFailed
-
_aborted
protected volatile boolean _aborted
-
_fetchHeaderTimeout
protected int _fetchHeaderTimeout
-
_fetchTotalTimeout
protected int _fetchTotalTimeout
-
_fetchInactivityTimeout
protected int _fetchInactivityTimeout
-
_redirects
protected int _redirects
-
_redirectLocation
protected String _redirectLocation
-
_isGzippedResponse
protected boolean _isGzippedResponse
-
_decompressException
protected IOException _decompressException
-
_authState
protected EepGet.AuthState _authState
-
USER_AGENT
protected static final String USER_AGENT
this will be replaced by the HTTP Proxy if we are using it- See Also:
- Constant Field Values
-
CONNECT_TIMEOUT
protected static final int CONNECT_TIMEOUT
- See Also:
- Constant Field Values
-
INACTIVITY_TIMEOUT
protected static final int INACTIVITY_TIMEOUT
- See Also:
- Constant Field Values
-
MAX_COMPLETE_FAILS
protected static final int MAX_COMPLETE_FAILS
maximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14- See Also:
- Constant Field Values
-
-
Constructor Detail
-
EepGet
public EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
-
EepGet
public EepGet(I2PAppContext ctx, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching)
-
EepGet
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url)
-
EepGet
public EepGet(I2PAppContext ctx, int numRetries, String outputFile, String url, boolean allowCaching)
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url)
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, String postData)
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag)
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, String outputFile, String url, boolean allowCaching, String etag, String lastModified)
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String postData)
- Parameters:
outputFile
- ignored if outputStream is non-nulloutputStream
- takes precedence over outputFile
-
EepGet
public EepGet(I2PAppContext ctx, boolean shouldProxy, String proxyHost, int proxyPort, int numRetries, long minSize, long maxSize, String outputFile, OutputStream outputStream, String url, boolean allowCaching, String etag, String lastModified, String postData)
- Parameters:
outputFile
- ignored if outputStream is non-nulloutputStream
- takes precedence over outputFile
-
-
Method Detail
-
main
public static void main(String[] args)
EepGet [-p 127.0.0.1:4444] [-n #retries] [-e etag] [-o outputFile] [-m markSize lineLen] url As of 0.9.45, supports https and redirect to https
-
suggestName
public static String suggestName(String url)
Parse URL for a viable filename.- Parameters:
url
- a URL giving the location of an online resource- Returns:
- a filename to save the resource as on local filesystem
-
addStatusListener
public void addStatusListener(EepGet.StatusListener lsnr)
-
stopFetching
public void stopFetching()
-
fetch
public boolean fetch()
Blocking fetch, returning true if the URL was retrieved, false if all retries failed. Header timeout default 45 sec, total timeout default none, inactivity timeout default 60 sec.- Returns:
- success
-
fetch
public boolean fetch(long fetchHeaderTimeout)
Blocking fetch, timing out individual attempts if the HTTP response headers don't come back in the time given. If the timeout is zero or less, this will wait indefinitely. Total timeout default none, inactivity timeout default 60 sec.- Returns:
- success
-
fetch
public boolean fetch(long fetchHeaderTimeout, long totalTimeout, long inactivityTimeout)
Blocking fetch.- Parameters:
fetchHeaderTimeout
- <= 0 for none (proxy will timeout if none, none isn't recommended if no proxy)totalTimeout
- <= 0 for default noneinactivityTimeout
- <= 0 for default 60 sec- Returns:
- success
-
doFetch
protected void doFetch(SocketTimeout timeout) throws IOException
This reads the response to a single fetch. Call after sendRequest()- Parameters:
timeout
- may be null- Throws:
IOException
-
readHeaders
protected void readHeaders() throws IOException
- Throws:
IOException
-
shouldReadBody
protected boolean shouldReadBody()
Should we read the body of the response?- Returns:
- true always, overridden in EepHead
- Since:
- 0.9.50
-
readChunkLength
protected long readChunkLength() throws IOException
TODO this does not skip over chunk extensions (RFC 2616 sec. 3.6.1)- Throws:
IOException
-
sendRequest
protected void sendRequest(SocketTimeout timeout) throws IOException
- Parameters:
timeout
- may be null- Throws:
IOException
-
getRequest
protected String getRequest() throws IOException
- Throws:
IOException
-
getETag
public String getETag()
After fetch, the received value from the server, or null if none. Before fetch, and after some errors, may be the value passed in the constructor.
-
getLastModified
public String getLastModified()
After fetch, the received value from the server, or null if none. Before fetch, and after some errors, may be the value passed in the constructor.
-
getNotModified
public boolean getNotModified()
- Returns:
- true if the server returned 304
-
getContentType
public String getContentType()
After fetch, the received value from the server, or null if none.
-
getStatusCode
public int getStatusCode()
The server response (200, etc).- Returns:
- -1 if invalid, or if the proxy never responded, or if no proxy was used and the server never responded. If a non-proxied request partially succeeded (for example a redirect followed by a fail, or a partial fetch followed by a fail), this will be the last status code received. Note that fetch() may return false even if this returns 200.
- Since:
- 0.8.8
-
getStatusText
public String getStatusText()
The server text ("OK", "Not Found", etc). Note that the text may contain % encoding.- Returns:
- null if invalid, or if the proxy never responded, or if no proxy was used and the server never responded. If a non-proxied request partially succeeded (for example a redirect followed by a fail, or a partial fetch followed by a fail), this will be the last status code received. Note that fetch() may return false even if this returns "OK".
- Since:
- 0.9.9
-
setWriteErrorToOutput
public void setWriteErrorToOutput()
If called (before calling fetch()), data from the server or proxy will be written to the output file or stream even on an error response code (4xx, 5xx, etc). The error data will only be written if no previous data was written on an earlier try. Caller must of course check getStatusCode() or the fetch() return value.- Since:
- 0.8.8
-
addHeader
public void addHeader(String name, String value)
Add an extra header to the request. Must be called before fetch(). Not supported by EepHead. As of 0.9.10, If name is User-Agent, this will replace the default User-Agent header. As of 0.9.14, If name is If-None-Match or If-Modified-Since, this will replace the etag or last-modified value given in the constructor. Note that headers may be subsequently modified or removed in the I2PTunnel HTTP Client proxy. In proxied SSLEepGet, these headers are sent to the remote server, NOT the proxy.- Since:
- 0.8.8
-
addAuthorization
public void addAuthorization(String userName, String password)
Add basic authorization header for the proxy. Only added if the request is going through a proxy. Must be called before fetch().- Since:
- 0.8.9
-
parseAuthArgs
public static Map<String,String> parseAuthArgs(String args)
Parse the args in an authentication header. Modified from LoadClientAppsJob. All keys are mapped to lower case. Double quotes around values are stripped. Ref: RFC 2617 Public for I2PTunnelHTTPClientBase; use outside of tree at own risk, subject to change or removal- Parameters:
args
- non-null, starting after "Digest " or "Basic "- Since:
- 0.9.4, moved from I2PTunnelHTTPClientBase in 0.9.12
-
-