You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
3.7 KiB
77 lines
3.7 KiB
package com.zc.business.controller;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.OutputStream;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.net.URLEncoder;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.Map;
|
|
import java.util.HashMap;
|
|
//微博获取token的工具类
|
|
public class WeiboAuthExample {
|
|
private static final String APP_KEY = "1894516689";
|
|
private static final String APP_SECRET = "4e89660243b70328fb74ae10f9ed98e5";
|
|
private static final String REDIRECT_URI = "https://api.weibo.com/oauth2/default.html"; // 回调URL,需要URL编码
|
|
private static final String AUTHORIZE_URL = "https://api.weibo.com/oauth2/authorize?client_id="+APP_KEY+"&redirect_uri="+REDIRECT_URI+"&response_type=code";
|
|
|
|
public static void main(String[] args) throws IOException {
|
|
// 1. 引导用户到微博授权页面
|
|
System.out.println("Please visit the following URL to authorize your Weibo account:");
|
|
System.out.println(AUTHORIZE_URL);
|
|
System.out.println("After authorization, you will be redirected to the callback URL with an Authorization Code.");
|
|
|
|
// 在实际应用中,你应该设置一个HTTP服务器来处理回调,而不是从控制台读取输入。
|
|
// 这里为了简化示例,我们直接从控制台读取Authorization Code。
|
|
System.out.print("Enter the Authorization Code from the callback URL: ");
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
|
String code = reader.readLine();
|
|
// 2. 使用Authorization Code请求Access Token
|
|
String accessTokenUrl = "https://api.weibo.com/oauth2/access_token";
|
|
Map<String, String> params = new HashMap<>();
|
|
params.put("client_id", APP_KEY);
|
|
params.put("client_secret", APP_SECRET);
|
|
params.put("grant_type", "authorization_code");
|
|
params.put("code", code);
|
|
params.put("redirect_uri", REDIRECT_URI);
|
|
|
|
String accessTokenResponse = sendPostRequest(accessTokenUrl, params);
|
|
// 解析Access Token响应,实际应用中应该使用JSON库来解析
|
|
System.out.println("Access Token Response: " + accessTokenResponse);
|
|
|
|
}
|
|
|
|
private static String sendPostRequest(String url, Map<String, String> params) throws IOException {
|
|
URL obj = new URL(url);
|
|
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
|
con.setRequestMethod("POST");
|
|
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
|
con.setRequestProperty("Accept", "application/json");
|
|
con.setDoOutput(true);
|
|
|
|
StringBuilder postData = new StringBuilder();
|
|
for (Map.Entry<String, String> param : params.entrySet()) {
|
|
if (postData.length() != 0) postData.append('&');
|
|
postData.append(URLEncoder.encode(param.getKey(), StandardCharsets.UTF_8.toString()));
|
|
postData.append('=');
|
|
postData.append(URLEncoder.encode(param.getValue(), StandardCharsets.UTF_8.toString()));
|
|
}
|
|
byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8);
|
|
|
|
try (OutputStream os = con.getOutputStream()) {
|
|
os.write(postDataBytes);
|
|
}
|
|
int responseCode = con.getResponseCode();
|
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
|
String inputLine;
|
|
StringBuffer response = new StringBuffer();
|
|
|
|
while ((inputLine = in.readLine()) != null) {
|
|
response.append(inputLine);
|
|
}
|
|
in.close();
|
|
return response.toString();
|
|
}
|
|
}
|