Grails закодированных параметров Post Request - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь завершить поток Instagram Oauth,

В настоящее время у меня есть код авторизации, который я хочу обменять на токен доступа.Я должен сделать POST-запрос x-www-form-urlencoded к этой конечной точке

"https://api.instagram.com/oauth/access_token?"

Это то, что я сделал до сих пор.

String query = "https://api.instagram.com/oauth/access_token/?client_id=" + clientId +"&client_secret="+ clientSecret+ "&grant_type=authorization_code&redirect_uri="+ redirectUri + "&code=" + code

String response = new URL(query).getText()

В качестве ответа ожидается строка JSON.

Помните, что я новичок.

1 Ответ

0 голосов
/ 27 сентября 2019

Я не читал документацию по Instagram, но на основе вашего примера кода нужно помнить несколько вещей:

  • вы упомянули, что вы должны сделать запрос POST, ваш пример делаетзапрос GET
  • никогда не создает URL с ненадежными значениями параметров.В основном это означает: всегда кодировать параметры, никогда не доверять им.

Существуют десятки сторонних библиотек HTTP-запросов, которые обеспечивают гибкость и упрощают понимание таких аспектов, как тайм-ауты и перенаправления.Java 11 имеет встроенный HTTP-клиент, который также может облегчить это.Но, опираясь на код, предоставленный в вашем вопросе, с использованием базовых примитивов подключения Java, это может сработать:

URL url = new URL("https://api.instagram.com/oauth/access_token/?client_id=${URLEncoder.encode(clientId, 'UTF-8')}&client_secret=${URLEncoder.encode(clientSecret, 'UTF-8')}&grant_type=authorization_code&redirect_uri=${URLEncoder.encode(redirectUri, 'UTF-8')}&code=${URLEncoder.encode(code, 'UTF-8')}")
def jsonString = ((HttpURLConnection) url.openConnection()).with {
    setRequestMethod('POST')
    setRequestProperty('Accept', 'application/json')
    setDoInput(true)
    connect()

    if (getResponseCode() >= 400)
        throw new Exception("Error code = ${getResponseCode()}")

    inputStream.text
}

Каждый параметр URL закодирован так, что любые не относящиеся к URL безопасные символы, которые они содержат, становятся безопасными, и мы сообщаемв связи с тем, что это будет 'POST' и мы ожидаем получить обратно json в качестве входных данных.inputStream.text - это код groovy, который принимает входной поток из соединения, читает все содержимое и затем закрывает поток.Поскольку это последняя строка with замыкания, оно автоматически возвращается в качестве значения замыкания и присваивается переменной jsonString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...