Package net.i2p.util
Class EepGet
java.lang.Object
net.i2p.util.EepGet
- Direct Known Subclasses:
EepHead
,I2PSocketEepGet
,PartialEepGet
,SSLEepGet
EepGet [-p 127.0.0.1:4444]
[-n #retries]
[-o outputFile]
[-m markSize lineLen]
url
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static enum
protected class
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
protected class
Decompressor thread.static interface
Callback interface -
Field Summary
Modifier and TypeFieldDescriptionprotected boolean
protected String
the URL we actually fetch from (may differ from the _url in case of redirect)protected long
protected EepGet.AuthState
protected long
protected long
protected String
protected final I2PAppContext
protected int
protected IOException
protected boolean
protected String
protected final String
protected int
protected int
protected int
protected boolean
protected boolean
protected String
protected final String
protected final List<EepGet.StatusListener>
protected final Log
protected boolean
protected final int
protected OutputStream
protected final String
protected final OutputStream
protected Socket
protected final String
protected InputStream
protected OutputStream
protected final int
protected String
protected int
protected int
protected String
protected final boolean
protected boolean
protected boolean
protected final String
url we were asked to fetchprotected static final int
protected static final int
protected static final int
maximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14protected static final String
this will be replaced by the HTTP Proxy if we are using it -
Constructor Summary
ConstructorDescriptionEepGet
(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
Modifier and TypeMethodDescriptionvoid
addAuthorization
(String userName, String password) Add basic authorization header for the proxy.void
Add an extra header to the request.void
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.After fetch, the received value from the server, or null if none.getETag()
After fetch, the received value from the server, or null if none.After fetch, the received value from the server, or null if none.boolean
protected String
int
The server response (200, etc).The server text ("OK", "Not Found", etc).static void
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 httpsparseAuthArgs
(String args) Parse the args in an authentication header.protected long
TODO this does not skip over chunk extensions (RFC 2616 sec.protected void
protected void
sendRequest
(SocketTimeout timeout) void
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
Should we read the body of the response?void
static String
suggestName
(String url) Parse URL for a viable filename.
-
Field Details
-
_context
-
_log
-
_shouldProxy
protected final boolean _shouldProxy -
_proxyHost
-
_proxyPort
protected final int _proxyPort -
_numRetries
protected final int _numRetries -
_outputFile
-
_outputStream
-
_url
url we were asked to fetch -
_actualURL
the URL we actually fetch from (may differ from the _url in case of redirect) -
_listeners
-
_extraHeaders
-
_keepFetching
protected boolean _keepFetching -
_proxy
-
_proxyOut
-
_proxyIn
-
_out
-
_alreadyTransferred
protected long _alreadyTransferred -
_bytesTransferred
protected long _bytesTransferred -
_bytesRemaining
protected long _bytesRemaining -
_currentAttempt
protected int _currentAttempt -
_responseCode
protected int _responseCode -
_responseText
-
_shouldWriteErrorToOutput
protected boolean _shouldWriteErrorToOutput -
_etag
-
_lastModified
-
_etagOrig
-
_lastModifiedOrig
-
_encodingChunked
protected boolean _encodingChunked -
_notModified
protected boolean _notModified -
_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
-
_isGzippedResponse
protected boolean _isGzippedResponse -
_decompressException
-
_authState
-
USER_AGENT
this will be replaced by the HTTP Proxy if we are using it- See Also:
-
CONNECT_TIMEOUT
protected static final int CONNECT_TIMEOUT- See Also:
-
INACTIVITY_TIMEOUT
protected static final int INACTIVITY_TIMEOUT- See Also:
-
MAX_COMPLETE_FAILS
protected static final int MAX_COMPLETE_FAILSmaximum times to try without getting any data at all, even if numRetries is higher @since 0.7.14- See Also:
-
-
Constructor Details
-
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
-
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
-
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 Details
-
main
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
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
-
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
This reads the response to a single fetch. Call after sendRequest()- Parameters:
timeout
- may be null- Throws:
IOException
-
readHeaders
- 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
TODO this does not skip over chunk extensions (RFC 2616 sec. 3.6.1)- Throws:
IOException
-
sendRequest
- Parameters:
timeout
- may be null- Throws:
IOException
-
getRequest
- Throws:
IOException
-
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
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
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
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
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
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
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
-