HTTPS-запрос с использованием ksoap2 KotlinAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 HTTPS-запрос с использованием ksoap2 Kotlin

Сообщение Anonymous »

Я разрабатываю приложение, использующее SOAP API, и использую библиотеку ksoap2 в Kotlin. Мне нужно сделать HTTPS-запрос. У меня есть сертификат .pfx с определенным паролем, а также имя пользователя и пароль, которые служат учетными данными. В WcfStorm запрос работает нормально после загрузки сертификата и настройки аутентификации по имени пользователя и паролю на уровне безопасности с протоколом TLS в значениях конфигурации. Теперь я попытался реализовать это в коде, но застрял и не знаю, что делать дальше. Кто-нибудь сталкивался с подобной проблемой и как вы ее решили? Пожалуйста, дайте подробное объяснение, так как я младший разработчик. Ниже приведен мой текущий код.
Пример функции из SoapClient.kt:

Код: Выделить всё

fun getSomething(context: Context): List {
val namespace = "NAMESPACE"
val methodName = "GetSomething"
val soapAction = "$namespace/FIXEDVALUE/$methodName"
val urlString = getServiceUrl(context)

val request = SoapObject(namespace, methodName)

val username = "USERNAME"
val password = "PASSWORD"

request.addProperty("username", USERNAME)
request.addProperty("password", PASSWORD)

val envelope = SoapSerializationEnvelope(SoapEnvelope.VER11).apply {
dotNet = true
setOutputSoapObject(request)
}

val headerList = listOf(
HeaderProperty("soapAction", soapAction)
)

try {
val url = URL(urlString)

val keyStore = KeyStore.getInstance("PKCS12").apply {
load(context.resources.openRawResource(R.raw.CERTIFIKAT), "SIFRA".toCharArray())
}

val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()).apply {
init(keyStore, "SIFRA".toCharArray())
}

val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).apply {
init(keyStore)
}

val sslContext = SSLContext.getInstance("TLS").apply {
init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, null)
}

val transport = CustomHttpsTransportSE(url.host, url.port, url.file, 60000, sslContext.socketFactory)
transport.debug = true

transport.call(soapAction, envelope, headerList)

val response = envelope.response as SoapObject

return response

} catch (e: Exception) {
e.printStackTrace()
return emptyList()
}
}
CustomHttpsTransportSE.kt:

Код: Выделить всё

class CustomHttpsTransportSE(
host: String,
port: Int,
file: String,
timeout: Int,
private val sslSocketFactory: SSLSocketFactory
) : HttpsTransportSE(host, port, file, timeout) {

}

Я получаю статус 500 http в строке: Transport.call(soapAction,envelope,headerList)
Я пробовал много вещей, но не смог Нигде не нашел ни точного решения этой проблемы, ни полного кода, который мог бы мне помочь.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ap2-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»