【发布时间】:2014-06-30 02:33:13
【问题描述】:
我正在尝试通过我的 C# 应用程序发布一个表单。
我的问题是给定的令牌无效,发帖失败。
当我查看浏览器并阅读 GET 响应时,它会给出正确的令牌。我试图在我的应用程序中做同样的事情,但由于某种原因,我得到的渲染令牌无效。
我想从服务器获取第一个实际获取以获取第一个表单数据。我做错了吗?
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(linkToArticle);
req.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
string rawHtml = readStream.ReadToEnd();
string token = getToken(rawHtml);
response.Close();
readStream.Close();
var loginData = new NameValueCollection();
loginData.Add("__RequestVerificationToken", token);
loginData.Add("cbTerms", "on");
Console.WriteLine("token: "+ token);
Console.WriteLine("id: "+ id);
client.UploadValues("/Form/?aid="+id, "POST", loginData);
【问题讨论】:
-
这个函数只解析它。你用什么发帖?
-
其他标头的代码呢?我的意思是 CSRF 保护的 cookie 部分...
-
请注意,cookie 和表单标记值实际上是不同的,但形成了不应混淆的匹配对。您需要发回 cookie 值以及表单值。您没有显示您的 getToken() 函数,但大概只是解析表单值?
标签: c# antiforgerytoken