Giter VIP home page Giter VIP logo

Comments (22)

itning avatar itning commented on June 14, 2024

Apache http client can support HTTPS proxy:

HttpHost proxy = new HttpHost("https","www.xxx.xxx",8888);
CloseableHttpClient client = HttpClients.custom()
                    .setProxy(proxy)
                    .build();

So can OKHTTP client support it also?

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

I think we should support. I've set up tests to validate against other proxily servers but haven't been able to easily verify Https behaviour.

Do you have a public test server I can test against? That you know is working ?

from okhttp.

itning avatar itning commented on June 14, 2024

I think we should support. I've set up tests to validate against other proxily servers but haven't been able to easily verify Https behaviour.

Do you have a public test server I can test against? That you know is working ?

Thanks so much for your reply. I don’t currently have a publicly available proxy for you to test; however this is the project we are working from to set up our proxy. I hope this is somewhat helpful.

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

I confirmed with smokescreen that this clumsy workaround works

  val serverCert = """
      -----BEGIN CERTIFICATE-----
      MIIE+DCCAuCgAwIBAgIBBTANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJVUzET
...
      B5Ird7f+U0bSPpszX4PMGbydhsuhnbqDamrT0Q==
      -----END CERTIFICATE-----
    """.trimIndent().decodeCertificatePem()
    
    val certs = HandshakeCertificates.Builder()
      .addPlatformTrustedCertificates()
      .addTrustedCertificate(serverCert)
      .build()

    val sslSocketFactory = certs.sslSocketFactory()

    val client = OkHttpClient.Builder()
      .proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress("localhost", 4750)))
      .socketFactory(sslSocketFactory)
      .build()

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

OK change in code is simple, except our dependence on java.net.Proxy is limiting.

@swankjesse would it make sense to have our own model for Proxy?

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

A quick exploration, I'll revert some of this and see if it looks ok

#8377

from okhttp.

itning avatar itning commented on June 14, 2024

Hi @yschimke @swankjesse, Do we have release date for this feature?

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

I don't think clean support will make 5.0, as it would require a new Proxy domain model.

Instead I'm aiming to allow this workaround #8379

from okhttp.

itning avatar itning commented on June 14, 2024

@yschimke Do you mean we can have a workaround method without changing the source code?

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

@itning No, would require changing the client.

How are you configuring this proxy? Maybe I can see if there is a way to make that path work.

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

We don't currently have a similar API to Apache

HttpHost proxy = new HttpHost("https","www.xxx.xxx",8888);

from okhttp.

itning avatar itning commented on June 14, 2024

How are you configuring this proxy? Maybe I can see if there is a way to make that path work.

For now we use apache http client like this: #8373 (comment)

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

This would require this clumsy workaround for OkHttp

#8373 (comment)

Or at minimum

   // create a ssl socket factory somehow
    val sslSocketFactory = OkHttpClient().sslSocketFactory

    val client = OkHttpClient.Builder()
      .proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress("localhost", 4750)))
      .socketFactory(sslSocketFactory)
      .build()

from okhttp.

itning avatar itning commented on June 14, 2024

// create a ssl socket factory somehow
val sslSocketFactory = OkHttpClient().sslSocketFactory

val client = OkHttpClient.Builder()
  .proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress("localhost", 4750)))
  .socketFactory(sslSocketFactory)
  .build()

I use the code, but got error:

Exception in thread "main" java.lang.IllegalArgumentException: socketFactory instanceof SSLSocketFactory
	at okhttp3.OkHttpClient$Builder.socketFactory(OkHttpClient.kt:723)
	at xxx.main(xxx.java:178)

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

Sorry, I should have been clearer.

It requires this PR, unless you wrap that socket factory again.

#8379

from okhttp.

itning avatar itning commented on June 14, 2024

@yschimke I'm sorry to bother you again and request when I can use the solution you provided?

from okhttp.

yschimke avatar yschimke commented on June 14, 2024

For now, try something like this

      val client =
        OkHttpClient.Builder()
          .sslSocketFactory(socketFactory, trustManager)
          .proxy(Proxy(Proxy.Type.HTTP, it.remoteAddress()))
          .protocols(listOf(Protocol.HTTP_2, Protocol.HTTP_1_1))
          .socketFactory(socketFactory.asSocketFactory())
          .build()

  private fun SSLSocketFactory.asSocketFactory(): SocketFactory {
    return DelegatingSocketFactory(this)
  }

DelegatingSocketFactory would be something like

open class DelegatingSocketFactory(private val delegate: SocketFactory) : SocketFactory() {

from okhttp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.