我正在为 Minecraft 制作一个启动器。1.6.2变化很大,所以登录的方式不一样了。如果你们中的任何人有任何使用 C# 登录我的世界的知识,我将不胜感激。
wClient.DownloadString("http://login.minecraft.net/?user=" + strUsername + "&password=" + strPassword + "&version=13");
我相信这曾经是一种有效的方法,但我不太确定了。感谢您的帮助,谢谢。
回复 TheUnrealMegashark 对 Rhys Towey 的回答的评论。我一直在努力让它启动,但是。它让我有点失望。下一个更新将包括 1.6 修复。只好想办法了。
您的问题的正确答案是获取 Session 的 Web 链接当前仍在使用中。那里没有什么新鲜事。
谨防!你必须知道你的
" http://login.minecraft.net/?user= " + strUsername + "&password=" + strPassword + "&version=13"
是不安全的。它通过互联网以纯文本形式发送用户的密码。它可能会受到“中间人”的攻击。
加密连接的正确方法之一是将 HTTPS 与 POST 结合使用。使用 POST,我避免发送请求 URL 中的所有数据并通过 POST 发送数据。使用 HTTPS,我对请求 URL 返回后发送的所有数据进行加密。HTTPS 使 POST 加密,从而消除“中间人”攻击。
您可以将 GET 与 HTTPS 一起使用,它仍然是安全的(根据我的阅读)。但是,这被认为是不安全的做法。尽管它在您的计算机和连接设备之间的所有帐户中都是安全的,但在其他任何地方都可能会被看到并受到“背后的人攻击”的影响。我的意思是,当您发送此 URL 时,您的计算机可能会将该 URL 记录在某种历史记录中,或者以纯文本形式显示在地址栏中。虽然,感觉您没有制作网络浏览器并且没有显示 URL,但这可能都被遗忘了。
但是,如果是我,我仍然会安全行事,只是使用更安全的策略。
将 HTTPS 与 POST 一起使用。
这是我在“AtomLauncher”中使用的代码示例。此代码会将 POST 数据发送到 URL 并返回一个字符串。转到http://www.minecraftwiki.net/wiki/Minecraft.net以获取有关返回的字符串的更多信息。
string mcURLData = "Error";
using (WebClient client = new WebClient()) // Get Data from Minecraft with username and password
{
// This a Text control for my Program, ignore this commented line if you wish.
// this.Invoke(new MethodInvoker(delegate { homeLabelTop.Text = "Connecting to Minecraft.net..."; }));
try
{
System.Collections.Specialized.NameValueCollection urlData = new System.Collections.Specialized.NameValueCollection();
urlData.Add("user", "UserName");
urlData.Add("password", "MYPa22w0rd");
urlData.Add("version", "13");
byte[] responsebytes = client.UploadValues("https://login.minecraft.net", "POST", urlData);
mcURLData = Encoding.UTF8.GetString(responsebytes);
}
catch
{
if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
{
mcURLData = "Internet Disconnected.";
}
else
{
mcURLData = "Can't connect to login.minecraft.net.";
}
}
}
要将 HTTPS 与 GET 一起使用,
只需更改
http
在你的代码中
https
在其他新闻中。
我已经修复了我的代码。随意(上传时)使用它。供您参考,您需要知道当 1.6.X 启动时,它会创建一个 natives 文件夹,它会立即开始使用该文件夹。我为解决此问题所做的工作是运行 1.6.2 并复制它创建的 natives 文件夹并删除该号码。
Created "version/1.6.2/1.6.2-natives-###"
Copied it to "version/1.6.2/1.6.2.natives"
Point my program to "natives" folder I created.
我将来最终要做的是自动检查 natives 文件夹,如果它不存在,我会让它从 Internet 下载 natives。(我很想知道我的世界在哪里得到它当前的本地人,所以我基本上可以做同样的事情。除非,它所做的是每次启动时从互联网上下载它。如果是真的,那有点丑陋。像我一样看到带宽使用限制。)