Задать вопрос
@uzolenta

Как сделать запрос okhttp3 с прокси SOCKS?

Здравствуйте!
Как сделать запрос с SOCKS с логином и паролем с помощью okhttp на kotlin?
Перепробовал уже всякое, как говорится. Выдаваемые ошибки углубляли в вопрос, но заводили также в тупик.
Как правильно реализовать? Спасибо.

val proxyHost = "81.177.183.222"
        val proxyPort = 8000
        val socket = Socket(proxyHost, proxyPort)
        val proxy: Proxy = Proxy(Proxy.Type.SOCKS, InetSocketAddress(proxyHost, proxyPort))
        val credential: String = Credentials.basic("nGow22", "G6LU22")

        val postBody = "&hardware_id=1"      
        val api =  "https://vk.com"
        
                val request = Request.Builder()
                    .url(api)
                    .post(postBody.toRequestBody(MEDIA_TYPE_MARKDOWN))
                    .header("Proxy-Authorization", credential)
                    .header("Connection", "close")
                    .build()

                client = OkHttpClient.Builder()
                    /*
                    .connectTimeout(30, TimeUnit.SECONDS)
                    .writeTimeout(30, TimeUnit.SECONDS)
                    .readTimeout(30, TimeUnit.SECONDS)
                     */
                    .retryOnConnectionFailure(true)
                    .proxy(proxy)
                    .build()

                client.newCall(request).enqueue(object : Callback {
                    override fun onFailure(call: Call, e: IOException) {
                        println("client.newCall(request).enqueue ERROR")
                        e.printStackTrace()

                        runOnUiThread {
                            Toast.makeText(
                                this@MainActivity,
                                "Крит.ошибка: ${e.message}",
                                Toast.LENGTH_LONG
                            ).show()
                        }
                        return
                    }
                    override fun onResponse(call: Call, response: Response) {
                        response.use {
                            if (!response.isSuccessful) {
                                // Simply returning api's own failure message
                                println("!response.isSuccessful")
                                return
                                //throw IOException("Unexpected code $response")
                            }

                            /*
                            for ((name, value) in response.headers) {
                                println("$name: $value")
                            }
                            */

                            val jsonData = response.body.string()
                            println("jsonData: $jsonData")

                            if(jsonData.isEmpty()) {
                                println("jsonData.isEmpty()")
                                return
                            }



                        }
                    }
                })
  • Вопрос задан
  • 18 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
Use proxyAuthenticator to set the authenticator for proxy servers.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы