Мои вопросы выглядят так же, как и этот вопрос: Java-эквивалент Pythons urllib.urlencode (UrlEncode на основе HashMap) однако, это не так.Поскольку его ответ неверен (или я делаю что-то неправильно, о чем я не знаю).
У меня есть этот код Python3:
def create_vxttoken_data(path_uri, expiry, reuse, shared_secret):
# Combine the parameters into a URL-encoded string
message = []
message.extend([('pathURI', path_uri)])
message.extend([('expiry', expiry)])
message.extend([('reuse', reuse)])
print(message)
url_encoded_message = urlencode(message)
print(url_encoded_message)
# ... rest of the code
Это вывод:
[('pathURI', 'http://my.domain.net/*'), ('expiry', 1553937508), ('reuse', 0)]
pathURI=http%3A%2F%2Fmy.domain.net%2F%2A&expiry=1553937508&reuse=0
Я пытался написать это на Kotlin.Итак, это мой код:
fun main(args: Array<String>) {
val queryParams = "pathURI=$PATH_URI&expiry=${expiryTime(10)}&reuse=$REUSE"
println(queryParams)
val encodedQueryParams = URLEncoder.encode(queryParams, Charsets.UTF_8.toString())
println(encodedQueryParams)
// ... rest of the code
Это его вывод:
pathURI=http://my.domain.net/*&expiry=1553938196&reuse=0
pathURI%3Dhttp%3A%2F%2Fmy.domain.net%2F*%26expiry%3D1553938196%26reuse%3D0
При сравнении второй строки выводов вы видите, что Kotlin / Java преобразовал =
, тогда как Pythonне сделал.Кроме того, Kotlin / Java не переводил *
, в то время как Python делает.Я хочу, чтобы Kotlin / Java генерировал вывод, как это делает Python.Остальная часть моего кода создает токен на основе этой информации.Следовательно, моя аутентификация не проходит.
Примечание: в моем файле Kotlin / Java, когда я заменяю
val encodedQueryParams = URLEncoder.encode(queryParams, Charsets.UTF_8.toString())
By
val encodedQueryParams = "pathURI=http%3A%2F%2Fmy.domain.net%2F%2A&expiry=1553937508&reuse=0"
, тогда мой код отдыха сгенерирует токен, который в точности совпадает с тем, что генерирует Python,Следовательно, это означает, что что-то не так с моим URLEncoder.encode
.