Пример #1
0
  /**
   * Opens a new HTTP stream for reading, i.e. a GET request.
   *
   * @param path the URL for the stream
   * @return the opened stream
   */
  static HttpStreamWrapper openRead(HttpPath path) throws IOException {
    HttpStream stream = createStream(path);
    stream._isPost = false;

    HttpStreamWrapper wrapper = new HttpStreamWrapper(stream);

    String status = (String) wrapper.getAttribute("status");

    // ioc/23p0
    if ("404".equals(status)) {
      throw new FileNotFoundException(L.l("'{0}' returns a HTTP 404.", path.getURL()));
    }

    return wrapper;
  }
Пример #2
0
  /**
   * Creates a new HTTP stream. If there is a saved connection to the same host, use it.
   *
   * @param path the URL for the stream
   * @return the opened stream
   */
  private static HttpStream createStream(HttpPath path) throws IOException {
    String host = path.getHost();
    int port = path.getPort();

    HttpStream stream = null;
    long streamTime = 0;
    synchronized (LOCK) {
      if (_savedStream != null
          && host.equals(_savedStream.getHost())
          && port == _savedStream.getPort()) {
        stream = _savedStream;
        streamTime = _saveTime;
        _savedStream = null;
      }
    }

    if (stream != null) {
      long now;

      now = CurrentTime.getCurrentTime();

      if (now < streamTime + 5000) {
        // if the stream is still valid, use it
        stream.init(path);
        return stream;
      } else {
        // if the stream has timed out, close it
        try {
          stream._isKeepalive = false;
          stream.close();
        } catch (IOException e) {
          log.log(Level.FINE, e.toString(), e);
        }
      }
    }

    Socket s;

    try {
      s = new Socket(host, port);

      if (path instanceof HttpsPath) {
        SSLContext context = SSLContext.getInstance("TLSv1");

        javax.net.ssl.TrustManager tm =
            new javax.net.ssl.X509TrustManager() {
              public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
              }

              public void checkClientTrusted(
                  java.security.cert.X509Certificate[] cert, String foo) {}

              public void checkServerTrusted(
                  java.security.cert.X509Certificate[] cert, String foo) {}
            };

        context.init(null, new javax.net.ssl.TrustManager[] {tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();

        SSLSocket sslSock = (SSLSocket) factory.createSocket(s, host, port, true);

        s = sslSock;
      }
    } catch (ConnectException e) {
      throw new ConnectException(path.getURL() + ": " + e.getMessage());
    } catch (Exception e) {
      throw new ConnectException(path.getURL() + ": " + e.toString());
    }

    int socketTimeout = 300 * 1000;

    try {
      s.setSoTimeout(socketTimeout);
    } catch (Exception e) {
    }

    return new HttpStream(path, host, port, s);
  }