我们在使用一些工具进行批量转存或者分享的时候需要cookie
或者 我们自己在做网盘拉新的时候 需要自己是开发者工具去拿cookie比较麻烦
可以使用我这边获取到登录二维码 登录成功后会自动拿到cookie和用户信息
可以自己实现前端页面
效果图
@Slf4j
@RestController
@RequestMapping("/quark/")
public class QuarkController {
@Resource
private QuarkOfficialService quarkOfficialService;
// /**
// * 获取token和requestId (第三方接口)
// *
// * @return
// */
// @GetMapping("token")
// public RestResponse getQuarkToken() {
// String getTokenUrl = "https://quark.uuxiao.cn/api/mini/generate";
// String getToken = HttpUtil.get(getTokenUrl);
// log.info("getToken:{}", getToken);
// return RestResponse.success().put(JSONObject.parseObject(getToken));
// }
/**
* 获取token和requestId (官方接口)
*
* @return
*/
@GetMapping("token")
public RestResponse getQuarkToken() {
JSONObject quarkToken = quarkOfficialService.getQuarkToken();
log.info("quarkToken:{}", quarkToken);
return RestResponse.success().put(quarkToken);
}
// /**
// * 获取扫码登录二维码链接(三方生成二维码)
// *
// * @return
// */
// @GetMapping("getQrCodeUrl")
// public RestResponse getQrCodeUrl(String token) {
// String getQrCodeUrl = "https://quark.uuxiao.cn/qrcode/build?text=https://su.quark.cn/4_eMHBJ?token=" + token;
// return RestResponse.success().put(getQrCodeUrl);
// }
/**
* 获取扫码登录二维码链接(使用Base64)
*
* @return
*/
@GetMapping("getQrCodeUrl")
public RestResponse getQrCodeUrl(String token) {
String qrCodeUrl = "https://su.quark.cn/4_eMHBJ?token=" + token;
log.info("生成二维码URL: {}", qrCodeUrl);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
QrCodeUtil.generate(qrCodeUrl, 300, 300, "png", outputStream);
byte[] qrCodeBytes = outputStream.toByteArray();
String base64QrCode = Base64.encode(qrCodeBytes);
return RestResponse.success(base64QrCode);
}
/**
* 获取cookies和用户信息
*
* @return
*/
@GetMapping("getCookiesAndUserInfo")
public RestResponse getQrCodeUrl(String token, String requestId) {
JSONObject respJson = null;
for (int i = 0; i < 10; i++) {
String getCookiesUrl = "https://uop.quark.cn/cas/ajax/getServiceTicketByQrcodeToken?client_id=532&v=1.2&token=" +
token + "&request_id=" + requestId;
// 发送 GET 请求
String body = HttpUtil.get(getCookiesUrl);
JSONObject jsonObject = JSONObject.parseObject(body);
Integer status = jsonObject.getInteger("status");
if (status != 2000000) {
continue;
}
String serviceTicket = jsonObject.getJSONObject("data").getJSONObject("members").getString("service_ticket");
String url = "https://pan.quark.cn/account/info?st=" + serviceTicket + "&lw=scan";
HttpResponse response = HttpUtil.createGet(url).execute();
List<HttpCookie> responseCookies = response.getCookies();
String cookiesString = responseCookies.stream()
.map(HttpCookie::toString)
.collect(Collectors.joining(";"));
log.info("夸克cookie:{}", cookiesString);
String userInfo = HttpUtil.get(url);
log.info("用户信息:{}", userInfo);
respJson = new JSONObject();
respJson.put("cookies", cookiesString);
respJson.put("userInfo", JSONObject.parseObject(userInfo));
break;
}
if (respJson == null) {
return RestResponse.error();
}
return RestResponse.success().put(respJson);
}
}