gpt4 book ai didi

java - Grails 编码参数发布请求

转载 作者:行者123 更新时间:2023-12-02 00:10:20 24 4
gpt4 key购买 nike

我正在尝试完成 Instagram Oauth 流程,

我目前拥有授权代码,可以用它来交换访问 token 。我要向此端点发出 x-www-form-urlencoded POST 请求

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 字符串。

请记住,我是初学者。

最佳答案

我还没有阅读 Instagram 文档,但根据您的示例代码,有几点需要记住:

  • 您提到必须发出 POST 请求,您的示例发出 GET 请求
  • 切勿使用不受信任的参数值构建 URL。这基本上意味着:始终对参数进行编码,永远不要信任它们。

有数十个第 3 方 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 是常规代码,它从连接获取输入流并读取所有内容,然后关闭该流。由于它是 with 闭包的最后一行,因此它会自 Action 为闭包的值返回并分配给变量 jsonString

关于java - Grails 编码参数发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com