[英]WebRequest and WebClient - Imitate an Ajax post in c#
今天,我遇到了一个有趣而奇怪的问题。 已有的历史-几天前,我写了一种方法,利用Webclient
将信息发布到wordpress登录页面,它返回给我一个HTML响应,该响应是“已登录”或“无效凭据”
...
using (var webClient = new WebClient())
{
var email = ((User)user).email;
var password = StringCipher.Decrypt(((User)user).password, CIFFConstants.CryptoKey);
webClient.UploadValues($"{host}/bloginternal/wp-login.php", new NameValueCollection()
{
{ "log", email },
{ "pwd", password
}});
var message = System.Text.Encoding.Default.GetString(result);
LogResponseFromServer(message);
}...
今天,通过向我返回登录页面本身(似乎没有将log和pwd变量发布到页面上的表单上),也没有尝试提交表单,该方法变得很糟糕。
我认为“好吧,也许WebClient并不是解决这种情况的最佳方法”,并采取了第二种方法使用WebRequest
var email = ((User) user) + "test";
var password = StringCipher.Decrypt(((User) user).password, CIFFConstants.CryptoKey);
var baseAddress = $"{host}/bloginternal/wp-login.php";
var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";
var parsedContent = new JavaScriptSerializer().Serialize(new { log = email, pwd = password});
var encoding = new ASCIIEncoding();
var bytes = encoding.GetBytes(parsedContent);
var newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
请注意,我在电子邮件后添加了虚假的“测试”,这实际上是出于测试目的,以查看该页面是否会像以前一样向我返回“无效登录”。令我沮丧的是,它仍然仅返回登录页面,该表单为似乎没有提交任何信息。
我试图重现的ajax如下:
$.ajax({
url: '/bloginternal/wp-login.php',
data: { log: values.Email, pwd: values.Password },
type: "POST",
async: false,
success: function () {
}
});
奇怪的是, WebClient
解决方案工作得很好,我能够通过检查响应是否返回“已登录”状态或“无效凭据”状态来模仿上面列出的ajax调用。
为什么我要发布的站点仅返回股票登录页面,就像没有提交任何信息一样,原因为何? 我在复制Ajax调用时是否错过了任何可能影响服务器返回给我的东西的东西?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.