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
  • Field Details

  • Constructor Details

  • Method Details

    • 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 none
      inactivityTimeout - <= 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.
    • getServer

      public String getServer()
      Show the Server field
      Since:
      I2P+ 0.9.47
    • getContentLanguage

      public String getContentLanguage()
      Show the Content-Language field
      Since:
      I2P+ 0.9.47
    • getTransferEncoding

      public String getTransferEncoding()
      Show the Transfer-Encoding field
      Since:
      I2P+ 0.9.47
    • getContentEncoding

      public String getContentEncoding()
      Show the Content-Encoding field
      Since:
      I2P+ 0.9.47
    • getCacheControl

      public String getCacheControl()
      Show the Cache-Control field
      Since:
      I2P+ 0.9.47
    • getAcceptRanges

      public String getAcceptRanges()
      Show the Accept-Ranges field
      Since:
      I2P+ 0.9.47
    • getExpiryDate

      public String getExpiryDate()
      Show the Expires field
      Since:
      I2P+ 0.9.47
    • getCookie

      public String getCookie()
      Show the Set-Cookie field
      Since:
      I2P+ 0.9.47
    • getReferrerPolicy

      public String getReferrerPolicy()
      Show the Referrer-Policy field
      Since:
      I2P+ 0.9.47
    • getVary

      public String getVary()
      Show the Vary field
      Since:
      I2P+ 0.9.47
    • getXframeOptions

      public String getXframeOptions()
      Show the X-frame-Options field
      Since:
      I2P+ 0.9.47
    • getCSP

      public String getCSP()
      Show the Content-Security-Policy field
      Since:
      I2P+ 0.9.47
    • getXSSProtection

      public String getXSSProtection()
      Show the X-XSS-Protection field
      Since:
      I2P+ 0.9.47
    • getXContentTypeOptions

      public String getXContentTypeOptions()
      Show the X-Content-Type-Options field
      Since:
      I2P+ 0.9.47
    • getXPoweredBy

      public String getXPoweredBy()
      Show the X-Powered-By field
      Since:
      I2P+ 0.9.47
    • 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
    • getStatus

      public String getStatus()
      Show a combined server status message e.g. "200 OK"
      Since:
      I2P+ 0.9.47
    • 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