Java---取得操作系统默认的代理


1、取得 代理

private ProxySelector proxySelector = ProxySelector.getDefault();
  
  /**
   * The proxy selector to use.
   *
   * @return The proxy selector to use.
   */
  public ProxySelector getProxySelector() {
    return proxySelector;
  }
  
  /**
   * Selects a proxy for the given URL.
   *
   * @param requestTokenURL The URL
   * @return The proxy.
   */
  protected Proxy selectProxy(URL requestTokenURL) {
    try {
      List<Proxy> selectedProxies = getProxySelector().select(requestTokenURL.toURI());
      return selectedProxies.isEmpty() ? Proxy.NO_PROXY : selectedProxies.get(0);
    }
    catch (URISyntaxException e) {
      throw new IllegalArgumentException(e);
    }
  }

2.  创建HTTP连接

  /**
   * Open a connection to the given URL.
   *
   * @param requestTokenURL The request token URL.
   * @return The HTTP URL connection.
   */
  protected HttpURLConnection openConnection(URL requestTokenURL) {
    try {
      HttpURLConnection connection = (HttpURLConnection) requestTokenURL.openConnection(selectProxy(requestTokenURL));
      connection.setConnectTimeout(getConnectionTimeout());
      connection.setReadTimeout(getReadTimeout());
      return connection;
    }
    catch (IOException e) {
      throw new OAuthRequestFailedException("Failed to open an OAuth connection.", e);
    }
  }

3. 设置其他参数

  /**
   * Read a resource.
   *
   * @param details The details of the resource.
   * @param url The URL of the resource.
   * @param httpMethod The http method.
   * @param token The token.
   * @param additionalParameters Any additional request parameters.
   * @param additionalRequestHeaders Any additional request parameters.
   * @return The resource.
   */
  protected InputStream readResource(ProtectedResourceDetails details, URL url, String httpMethod, OAuthConsumerToken token, Map<String, String> additionalParameters, Map<String, String> additionalRequestHeaders) {
    url = configureURLForProtectedAccess(url, token, details, httpMethod, additionalParameters);
    String realm = details.getAuthorizationHeaderRealm();
    boolean sendOAuthParamsInRequestBody = !details.isAcceptsAuthorizationHeader() && (("POST".equalsIgnoreCase(httpMethod) || "PUT".equalsIgnoreCase(httpMethod)));
    HttpURLConnection connection = openConnection(url);

    try {
      connection.setRequestMethod(httpMethod);
    }
    catch (ProtocolException e) {
      throw new IllegalStateException(e);
    }

    Map<String, String> reqHeaders = details.getAdditionalRequestHeaders();
    if (reqHeaders != null) {
      for (Map.Entry<String, String> requestHeader : reqHeaders.entrySet()) {
        connection.setRequestProperty(requestHeader.getKey(), requestHeader.getValue());
      }
    }

    if (additionalRequestHeaders != null) {
      for (Map.Entry<String, String> requestHeader : additionalRequestHeaders.entrySet()) {
        connection.setRequestProperty(requestHeader.getKey(), requestHeader.getValue());
      }
    }

    int responseCode;
    String responseMessage;
    try {
      connection.setDoOutput(sendOAuthParamsInRequestBody);
      connection.connect();
      if (sendOAuthParamsInRequestBody) {
        String queryString = getOAuthQueryString(details, token, url, httpMethod, additionalParameters);
        OutputStream out = connection.getOutputStream();
        out.write(queryString.getBytes("UTF-8"));
        out.flush();
        out.close();
      }
      responseCode = connection.getResponseCode();
      responseMessage = connection.getResponseMessage();
      if (responseMessage == null) {
        responseMessage = "Unknown Error";
      }
    }
    catch (IOException e) {
      throw new OAuthRequestFailedException("OAuth connection failed.", e);
    }

    if (responseCode >= 200 && responseCode < 300) {
      try {
        return connection.getInputStream();
      }
      catch (IOException e) {
        throw new OAuthRequestFailedException("Unable to get the input stream from a successful response.", e);
      }
    }
    else if (responseCode == 400) {
      throw new OAuthRequestFailedException("OAuth authentication failed: " + responseMessage);
    }
    else if (responseCode == 401) {
      String authHeaderValue = connection.getHeaderField("WWW-Authenticate");
      if (authHeaderValue != null) {
        Map<String, String> headerEntries = StringSplitUtils.splitEachArrayElementAndCreateMap(StringSplitUtils.splitIgnoringQuotes(authHeaderValue, ','), "=", "\"");
        String requiredRealm = headerEntries.get("realm");
        if ((requiredRealm != null) && (!requiredRealm.equals(realm))) {
          throw new InvalidOAuthRealmException(String.format("Invalid OAuth realm. Provider expects \"%s\", when the resource details specify \"%s\".", requiredRealm, realm), requiredRealm);
        }
      }

      throw new OAuthRequestFailedException("OAuth authentication failed: " + responseMessage);
    }
    else {
      throw new OAuthRequestFailedException(String.format("Invalid response code %s (%s).", responseCode, responseMessage));
    }
  }


你可能感兴趣的:(Java---取得操作系统默认的代理)