当前位置: 首页 > 面试题库 >

OkHTTPClient代理身份验证如何?

李鸿
2023-03-14
问题内容

问题: 如何向OkHTTP添加授权代理。

我知道OkHTTP的生成器确实支持代理,尽管我很难设置一个代理。

/**
 * Given a Url and a base64 encoded password return the contents of a website.
 * @param urlString
 * @param password
 * @return JSON
 */
public String getURLJson(String urlString, String password) {       
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .build();

        Request request = new Request.Builder()
          .url(urlString)
          .get()
          .addHeader("authorization", "Basic " + password)
          .addHeader("cache-control", "no-cache")
          .build();

        Response response = null;
        try {
            response = client.newCall(request).execute();
            String string = response.body().string();
            response.body().close();
            return string;
        } catch (IOException e) {
            System.err.println("Failed scraping");
            e.printStackTrace();
        }
        return "failed";
    }

我有IP /端口/用户名/密码。

尽管我不知道如何将其转换为Proxy proxyclient.SetProxy()中可以使用的那些。

这似乎过于复杂,我似乎无法弄清楚。任何帮助,将不胜感激。


问题答案:

试试这个:

int proxyPort = 8080;
String proxyHost = "proxyHost";
final String username = "username";
final String password = "password";

Authenticator proxyAuthenticator = new Authenticator() {
  @Override public Request authenticate(Route route, Response response) throws IOException {
       String credential = Credentials.basic(username, password);
       return response.request().newBuilder()
           .header("Proxy-Authorization", credential)
           .build();
  }
};

OkHttpClient client = new OkHttpClient.Builder()
    .connectTimeout(60, TimeUnit.SECONDS)
    .writeTimeout(60, TimeUnit.SECONDS)
    .readTimeout(60, TimeUnit.SECONDS)
    .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)))
    .proxyAuthenticator(proxyAuthenticator)
    .build();


 类似资料:
  • 问题内容: 我一直在尝试使用Apaches HttpComponent的httpclient时从配置的属性中配置用于代理身份验证的用户和密码,但是没有成功。我发现的所有示例都引用了不再可用的方法和类,例如和。 因此,谁能给我一个有关如何配置代理凭据的示例? 问题答案: 对于Basic-Auth,它看起来像这样: 开箱即用不支持AFAIK NTLM。但是您也许可以使用过载来管理它。

  • 我使用Firefox WebDriver在Python 2.7与硒。我的python程序启动火狐浏览器,并在运行程序时访问不同的网站。但是,我需要设置具有身份验证的代理,以便当程序访问任何网站时,它将通过代理服务器访问。 关于SO也有一些类似的问题。但是,没有针对Python的Selenium Firefox WebDriver的特定解决方案。 Python Selenium WebDrive-代

  • 问题内容: 我正在尝试通过FTP SITE代理访问FTP服务器以绕过防火墙,因为我知道我的用户名/密码正确,因为可以使用FileZilla进行连接。我尝试使用,但没有用。码: 给我这个错误: 我尝试过的事情: 使用备用构造函数。 拆下 使用just ,不使用FTPProxyConnector 设置连接器之前进行身份验证,反之亦然。 但是,当我仅使用Authenticator时,会收到不同的错误提示

  • 问题内容: 我想将具有基本身份验证(用户名,密码)的代理用于Java中的连接(并且仅此连接)。以下代码适用于HTTP URL(例如“ http://www.google.com ”): 但是,该代码不适用于HTTPS URL(例如“ https://www.google.com ”)!我收到的时候我尝试访问HTTPS URL。 此代码适用于HTTP和HTTPS: 第二个代码的问题在于它设置了一个新

  • 问题内容: 我需要使用PostForm方法将代理与auth一起使用。如果我使用类似(简体)的内容: 我可以轻松做到,并且效果很好。但是现在,我正在编辑第三方程序包,并尝试将代理添加到现有代码中: 在我看来,它是行不通的,而且失败了。在此示例中,没有身份验证的代理可以正常工作。有人知道吗,在这种情况下我可以在auth中使用代理吗? 问题答案: 您正在尝试向响应中添加标头,这不是您发送到服务器的内容,

  • 我尝试在 Kubernetes 集群中使用 Strimzi (0.14) 构建一个 Kafka 集群。 我使用strimzi附带的示例,即examples/kafka/kafka-persistent.yaml。 这个yaml文件看起来像这样: 动物园管理员和Kafka经纪人都被抚养长大 然而,我在kafka代理日志中看到了错误: 有人知道如何解决这个问题吗?