c# - Minecraft 身份验证服务器返回 403 被禁止
问题描述
所以,我试图通过 C# 向 minecraft 身份验证服务器(https://authserver.mojang.com/authenticate)发送一个 POST 请求来创建一个新的 authToken ,但我收到以下错误:
System.Net.WebException: 'The remote server returned an error: (403) Forbidden.'
我当前尝试发送请求的代码是:
public void ObtainAccessToken(string username, string password)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://authserver.mojang.com/authenticate");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"agent\":{\"name\":\"Minecraft\",\"version\":1},\"username\":\"" + username + "\",\"password\":\"" + password + "\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
}
来自:https ://stackoverflow.com/a/28591279/17371073
我正在尝试登录已迁移的帐户
解决方案
使用我几年前的 Java 实现作为参考,我看到的唯一区别是我已将写入Content-Charset
UTF-8
的Content-Length
有效负载字节大小添加到请求标头(即您编写的 json 字符串的字节大小) . 如果没有必要,我怀疑我永远不会这样做。
编辑:遵循HTTP 规范,您的请求仅在以下情况下才有效:
Content-Length
在您的 HTTP 标头中包含该属性。- 发送 HTTP 请求后直接关闭连接。
由于您正在等待回复,因此您必须使用第一个选项。
推荐阅读
- java - 如何防止 Spring Boot 应用程序中的跨站脚本 (XSS) 攻击?
- typescript - 编译打字稿时如何防止错误“对象类型的索引签名隐式具有'任何'类型”?
- firefox - 在 Jmeter 中尝试 HTTP 测试脚本记录器时出错
- c++ - 为什么删除复制构造函数时,重载解析不会退回到引用基类的构造函数?
- python - Dash/Ploty 折线图 - 回调失败:服务器没有响应
- react-native - 如何在 React Native 中停止不必要的重新渲染组件
- docker - 如何使用 docker 安装 symfony 项目?
- c# - 从另一个线程追加 RichTextBox
- java - 每当我在 SpringBoot 应用程序中调用服务时,从文件中运行 sql 和 plsql 查询
- toloka - 字符串数组作为输入