LOL英雄联盟官方API调用

本文介绍了如何调用LOL英雄联盟的官方API,重点在于获取和处理token及端口,包括手动和代码方式获取,以及处理HTTPS认证。还涉及到在Python和C#中实现管理员权限和Base64编码处理token。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这是一篇关于LOL官方api的调用起步教程,语言为C#为主,以及python的部分代码示例,此篇会说明调用成功的必要点,以及难点部分。

一、概述

手动启动客户端,wegame启动也可。启动后,api的调用环境就达到要求了。

关键因素

大部分的API的的请求头(head)内容是一样的,解决head所需参数url的端口 是关键点。
1)head结构如下:

{
	"Accept":"application/json"
	"Content-Type":"application/json"
	"Authorization":"Basic xxxxxxxxxxx"
}

2)关于url
整体结构:固定前缀+“:”+端口+“/”+具体请求api。例如:https://127.0.0.1:54379/data-store/v1/install-dir

  • 固定前缀:https://127.0.0.1
  • 端口:xxx
  • 具体请求api:不同的api此处不同,例如:data-store/v1/install-dir是用来获取客户端运行程序的安装地址的

3)总结:

  • 关键需要的数据是token和port端口
  • 客户端每次启动都会刷新这两个值

难点

1)https请求
需要对认证进行处理
2)获取端口和token时,需要获取管理员权限

二、开始请求

端口与token的获取

手动获取

必须以管理员权限打开CMD命令窗,输入以下内容获取基本数据

wmic PROCESS WHERE name='LeagueClientUx.exe' GET commandline

获取内容如下:

在这里插入图片描述
提取关键点:

//端口
--app-port=xxxx
//token
--remoting-auth-token=xxxxx

代码获取

此时就涉及到如何获取管理员权限了,无需密码的方式,使某些代码在管理员权限下进行运行。此处表现出来的就是CMD命令的管理员权限需求。

//此处贴核心代码块,有些自己习惯写法不写在此处
public const string API_FILENAME = "api_file.txt";
public const string COMMAND = "wmic PROCESS WHERE name='LeagueClientUx.exe' GET commandline";
....
public bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
...
if (IsAdministrator())
 {
     var result = CMD(COMMAND);
     Console.WriteLine(result);
     //写入文件持久化,开启管理方式有异步操作
     using (StreamWriter sw = File.CreateText(API_FILENAME))
     {
         sw.WriteLine(result);
     }
 }
 else
 {
     using (StreamWriter sw = File.CreateText(API_FILENAME))
     {
     	//只是为了区分,写入txt
         sw.WriteLine("这是第一次写入,非管理员模式");	
     }
     ProcessStartInfo startInfo = new ProcessStartInfo();
     startInfo.UseShellExecute = true;
     startInfo.WorkingDirectory = Environment.CurrentDirectory;
     startInfo.FileName = AppDomain.CurrentDomain.FriendlyName + ".exe";//指定管理员环境下运行的启动文件,也就是exe
     //设置启动动作,确保以管理员身份运行
     startInfo.Verb = "runas";
     Process? pro;
     try
     {
     	//此处进行异步操作,从指定的管理员环境下运行的启动文件开始再次运行
         pro = System.Diagnostics.Process.Start(startInfo);
     }
     catch
     {
         return;
     }
     //相当于让线程同步执行结束,等待第二次执行结束
     pro.WaitForExit();
     //后面就是正常操作即可,均为管理员环境
...
/// <summary>
/// 奇怪的是,如果是python -V就会出现问题
 /// </summary>
 /// <param name="command">命令</param>
 /// <returns></returns>
 public string CMD(string command)
 {
     Process pro = new Process();
     pro.StartInfo.FileName = "cmd.exe";             //cmd  
     pro.StartInfo.UseShellExecute = false;          //不显示shell  
     pro.StartInfo.CreateNoWindow = true;            //不创建窗口  
     pro.StartInfo.RedirectStandardInput = true;     //打开流输入  
     pro.StartInfo.RedirectStandardOutput = true;    //打开流输出  
     pro.StartInfo.RedirectStandardError = true;     //打开错误流  

     pro.Start();//执行  
     pro.StandardInput.WriteLine(command + "&exit");      //&exit运行完立即退出  
     pro.StandardInput.AutoFlush = true;             //清缓存  

     var ll = pro.StandardOutput.ReadToEnd();            //读取输出  
     pro.WaitForExit();                              //等待程序执行完退出进程    
     pro.Close();//结束    
     return ll;
 }

python中对管理员权限的获取使用方法如下:

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except Exception as e:
        raise e
...
if is_admin():
            # 追加写入   
            # 这里是第二次执行达到的管理员环境
            print('hello') 
            time.sleep(3)
            
    else:
        if sys.version_info[0] == 3:#python 3
            # 追加写入    
            # with open("text2.txt","a",encoding='utf8') as file:
            #     file.write("非管理员写入\n")
            #开启管理员权限,并指定再次执行的启动文件,__file__可以用方法替代,由于此处含义模糊不好理解
            #,所以放弃了python的实现
            ctypes.windll.shell32.ShellExecuteW(None, "runas", __file__, None, 1)

处理token

token需要进行处理,并不是直接放入head就行了,使用base64进行cover。

#python,注意空格
import base64

token = "kzfhMpoEimcomT12MmnQxg"
auth = base64.b64encode(("riot:" + token).encode("UTF-8")).decode("UTF-8")
authorization = "Basic " + auth
print(authorization)
//c#
var token = "kzfhMpoEimcomT12MmnQxg";
token="riot:"+token;
string token_64 = "Basic "+Convert.ToBase64String(Encoding.UTF8.GetBytes(token));

https处理

处理认证问题,也并不复杂

protected static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{   // 总是接受  
    return true;
}

/// <summary>
/// https的get方法
/// </summary>
/// <param name="url">url</param>
/// <param name="heads">请求头内容</param>
/// <returns></returns>
public string HttpsGet(string url,Dictionary<string,string> heads)
{
    //1.关于认证
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);

    //2.开始请求
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    req.Method = "GET";


    foreach (var head in heads)
    {
        req.Headers.Add(head.Key, head.Value);
    }
    

    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    Stream stream = res.GetResponseStream();
    StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));
    string json = streamReader.ReadToEnd();

    streamReader.Close();
    stream.Close();
    res.Close();
    return json;
}

三、一些相关的api

1)url
port是动态的,需要提前准备

//获取客户端地址
get	https://127.0.0.1:port/data-store/v1/install-dir
//获取角色信息
get https://127.0.0.1:port/lol-summoner/v1/current-summoner
//开始匹配
get https://127.0.0.1:port/lol-gameflow/v1/gameflow-phase
//匹配成功检查
get https://127.0.0.1:port//lol-matchmaking/v1/ready-check
//接受对局
post https://127.0.0.1:port/lol-matchmaking/v1/ready-check/accept
//创建指定类型房间,有请求体
post https://127.0.0.1:port/lol-lobby/v2/lobby
请求体::{"queueId":ID }
ID如下:
420  召唤师峡谷·排位赛 单排/双排·征召
430  召唤师峡谷·匹配模式·自选
440  召唤师峡谷·排位赛 灵活排位·征召
450  嚎哭深渊·极地大乱斗·随机
700  召唤师峡谷·冠军杯赛·征召
830  召唤师峡谷·入门·自选
840  召唤师峡谷·新手·自选
850  召唤师峡谷·一般·自选
1090 云顶之奕(匹配模式)
1400 召唤师峡谷·终极魔典·自选
2000 召唤师峡谷·新手教程 第一部分·自选
2010 召唤师峡谷·新手教程 第二部分·自选
2020 召唤师峡谷·新手教程 第三部分·自选

2)head
请求头固定,其中关键点Authorization
在这里插入图片描述

3)官方API地址
LUA API
官方开发文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值