Java实现夸克扫码登录并获取cookie和用户信息

发布于:2025-08-31 ⋅ 阅读:(39) ⋅ 点赞:(0)

我们在使用一些工具进行批量转存或者分享的时候需要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);
    }
}