C# 如何向网站发送登录请求?

C# 如何向网站发送登录请求?,c#,request,C#,Request,所以我想发送一个登录网站的请求,我该怎么做 我试过下面的代码: string formUrl = "https://account.mojang.com/login"; string formParams = string.Format("email_address={0}&password={1}", "your email", "your password"); string cookieHeader; WebR

所以我想发送一个登录网站的请求,我该怎么做

我试过下面的代码:

string formUrl = "https://account.mojang.com/login";
            string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
            string cookieHeader;
            WebRequest req = WebRequest.Create(formUrl);
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "GET";
            byte[] bytes = Encoding.ASCII.GetBytes(formParams);
            req.ContentLength = bytes.Length;
            using (Stream os = req.GetRequestStream())
            {
                os.Write(bytes, 0, bytes.Length);
            }
            WebResponse resp = req.GetResponse();
            cookieHeader = resp.Headers["Set-cookie"];

我在第9行遇到一个错误:“无法发送带有此类动词的内容体。”

我将分两部分回答这个问题:第一部分是您收到的错误消息,第二部分是您应该如何解决问题

您的错误消息来自第9行,显然由于某些原因,
req.GetRequestStream()
失败:

using (Stream os = req.GetRequestStream())
仔细查看消息的文本,很明显问题出在哪里-当WebRequest实现不支持GET请求时,您正在尝试发送带有GET请求的
x-form-urlencoded
消息正文

无法发送包含此类型动词的内容体

GetRequestStream()
的功能是获取一个流,您可以将请求主体(“内容主体”)写入其中,在您的情况下是登录参数。您正在发送GET请求(GET和POST在HTTP规范中称为“动词”),而WebRequest不支持此操作

回到这里的实际问题,我相信您不是要发送GET请求,而是需要发送POST请求intead。如果是这种情况,则只需将第6行更改为:

req.Method = "POST";
大多数登录服务期望POST请求,GET请求在任何情况下都不起作用。但是,如果您想使用WebRequest对数据执行GET请求,则需要以不同的方式执行。数据必须编码到初始URL中,并且不需要获取请求流或写入请求流。在这种情况下,固定代码应为:

            string formURL = string.Format("https://account.mojang.com/login?email_address={0}&password={1}", "your email", "your password");
            string cookieHeader;
            WebRequest req = WebRequest.Create(formUrl);
            req.Method = "GET";
            WebResponse resp = req.GetResponse();
            cookieHeader = resp.Headers["Set-cookie"];

我将分两部分回答这个问题:第一部分是您收到的错误消息,第二部分是您应该如何解决这个问题

您的错误消息来自第9行,显然由于某些原因,
req.GetRequestStream()
失败:

using (Stream os = req.GetRequestStream())
仔细查看消息的文本,很明显问题出在哪里-当WebRequest实现不支持GET请求时,您正在尝试发送带有GET请求的
x-form-urlencoded
消息正文

无法发送包含此类型动词的内容体

GetRequestStream()
的功能是获取一个流,您可以将请求主体(“内容主体”)写入其中,在您的情况下是登录参数。您正在发送GET请求(GET和POST在HTTP规范中称为“动词”),而WebRequest不支持此操作

回到这里的实际问题,我相信您不是要发送GET请求,而是需要发送POST请求intead。如果是这种情况,则只需将第6行更改为:

req.Method = "POST";
大多数登录服务期望POST请求,GET请求在任何情况下都不起作用。但是,如果您想使用WebRequest对数据执行GET请求,则需要以不同的方式执行。数据必须编码到初始URL中,并且不需要获取请求流或写入请求流。在这种情况下,固定代码应为:

            string formURL = string.Format("https://account.mojang.com/login?email_address={0}&password={1}", "your email", "your password");
            string cookieHeader;
            WebRequest req = WebRequest.Create(formUrl);
            req.Method = "GET";
            WebResponse resp = req.GetResponse();
            cookieHeader = resp.Headers["Set-cookie"];

您是否尝试将http方法更改为POST?您尝试以编程方式登录minecraft帐户的原因是什么?您是否尝试将http方法更改为POST?您尝试以编程方式登录minecraft帐户的原因是什么?