Задать вопрос
@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
                            }



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

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

Похожие вопросы
Idea Platform Москва
от 90 000 до 180 000 ₽
Brief Москва
от 150 000 до 210 000 ₽
СМК-РК Москва
от 200 000 до 250 000 ₽