如何在C#中复制此JavaScript
How do I duplicate this JavaScript in C#
这是JavaScript
function ChangeVol(id)
{
document.form.selectFS_devId.value = id;
document.form.selectFS_currentNameSpace.value = "";
document.form.submit();
}
function ChangeEvsVol(id, vNodeId)
{
document.form.selectFS_evsId.value = vNodeId;
document.form.selectFS_currentNameSpace.value = "";
ChangeVol(id);
}
document.form.selectFS_devId.value = "all"
document.form.selectFS_evsId.value = "2"
这是我使用的当前C#代码
Uri url = new Uri("https://mgr/app");
HttpWebRequest request = null;
ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
CookieContainer cookieJar = new CookieContainer();
request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = cookieJar;
request.Method = "GET";
HttpStatusCode responseStatus;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
responseStatus = response.StatusCode;
url = request.Address;
}
if (responseStatus == HttpStatusCode.OK)
{
UriBuilder urlBuilder = new UriBuilder(url);
urlBuilder.Path =
urlBuilder.Path.Remove(urlBuilder.Path.LastIndexOf('/')) +
"/j_security_check";
request = (HttpWebRequest)WebRequest.Create(urlBuilder.ToString());
request.Referer = url.ToString();
request.CookieContainer = cookieJar;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (Stream requestStream = request.GetRequestStream())
using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII))
{
string postData = "j_username=user&j_password=user&submit=Send";
requestWriter.Write(postData);
}
string responseContent = null;
string myTargetString = "https://mgr/app/action/storage.VivolAction/eventsubmit_dopreparevivollist/ignored/f5/true";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader responseReader = new StreamReader(responseStream))
{
responseContent = responseReader.ReadToEnd();
}
Console.WriteLine(responseContent);
request = (HttpWebRequest)WebRequest.Create(myTargetString);
request.Method = "GET";
request.CookieContainer = cookieJar;
using (HttpWebResponse responsedownload = (HttpWebResponse)request.GetResponse())
using (Stream responseStream = responsedownload.GetResponseStream())
using (StreamReader responseReader = new StreamReader(responseStream))
{
responseContent = responseReader.ReadToEnd();
}
Console.WriteLine(responseContent);
问题是字符串myTargetString没有加载javascript参数,如果我能在URL中复制这些参数,那就太棒了,如果不能,我需要做什么才能像上面在StreamWriter中那样在帖子请求中提交这些参数?
using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII))
{
string postData = "j_username=user&j_password=user&submit=Send";
requestWriter.Write(postData);
}
我在url中所说的可能是这样的:
https://mgr/app/action/storage.VivolAction/eventsubmit_dopreparevivollist/ignored?&evsId=1&devId=all¤tpagenumberbottom=1&filtername=¤tpagenumber=1"aactionlink=/mgr/app/action/storage.VivolQuotaAction&ascending=true¤tpagesize=20&ignoreErrorMessages=true&pageindex=1&sortby=name&filterpath=
Fiddler给我提供了这个
POST https://mgr/app/action/storage.SelectFileSystemAction/eventsubmit_doprocessselectfilesystem/ignored
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-xpsdocument, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://mgr/app/action/storage.SelectFileSystemAction /eventsubmit_doprepareselectfilesystem/ignored
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: arc
Content-Length: 378
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: jid=asdsad ; jsso = asdas2sa
op=&selectFS_devId=all&selectFS_previous_template=&selectFS_evsId=2&selectFS_currentNameSpace=&selectFS_action_class=storage.VivolAction&selectFS_action_method=doPreparevivollist&selectFS_uniqueId=13655b454e3951462f&selectFS_dont_alter_current=false&selectFS_disableReplicationTargets=true&selectFS_disableReadCache=true&selectFS_disableWorm=false&selectFS_disableUnmounted=true
我可以在那里看到electFS_devId=all
和selectFS_evsId=2
,我需要更改EVSID,但我不知道如何构造URL。是的,我更改了cookie id的
您的javascript只是在执行提交之前为表单上可能隐藏的字段设置表单值。您将需要执行POST请求,与登录相同。
查看HTML中表单标记上的操作值,以确定在哪里提交数据,并将以下表单项放入postData:
- 选择FS_devId
- 选择FS_currentNameSpace
- selectFS_evsId
你可以使用类似的东西:
string postData = string.Format("selectFS_currentNameSpace={0}&selectFS_evsId={1}&selectFS_devId={2}", "", "2", "all");
看起来这会涉及到,因为它似乎正在使用selectFS_uniqueId
进行某种形式的会话或事务跟踪,您可能必须先执行get操作,然后从表单中提取该值。此外,请注意,您的提交位置,就像之前的j_security_check一样,POST(doprocess)与检索表单的GET(doprepare)不会到达相同的位置。
得到https://mgr/app/action/storage.SelectFileSystemAction/eventsubmit_doprepareselectfilesystem/ignored
岗位https://mgr/app/action/storage.SelectFileSystemAction/eventsubmit_doprocessselectfilesystem/ignored
再来看看你的帖子价值观。显然,有一个命令是用类(selectFS_action_class
)和方法(selectFS_action_method
)发出的,如果没有指定它们,很可能什么都不会做。
op=
&selectFS_devId=all
&selectFS_previous_template=
&selectFS_evsId=2
&selectFS_currentNameSpace=
&selectFS_action_class=storage.VivolAction
&selectFS_action_method=doPreparevivollist
&selectFS_uniqueId=13655b454e3951462f
&selectFS_dont_alter_current=false
&selectFS_disableReplicationTargets=true
&selectFS_disableReadCache=true
&selectFS_disableWorm=false
&selectFS_disableUnmounted=true
与其写所有这些东西来模拟用户通过web界面执行操作,不如用F5检查一下他们是否有可以调用的web服务?
也许问题是,这种形式的参数"j_username=user&j_password=user&submit=Send"是HTTP"GET"的参数,而不是"POST"的参数。您可以尝试通过这种方式获取参数。C#
var operacion = context.Request.Form[0] "POST"
var operacion = context.Request.Params[0];
或
Request.Querystring("parameterName") for "GET"
或者在javascript中,您可以使用$_GET或$_POST
我认为你的问题太多了。另外,你没有在浏览器中显示任何关于帖子的代码。
你似乎只是想知道如何让一个表单帖子工作。。。我注意到你没有设置contentlength属性。。。这可能与此有关。此外,请查看此"帖子"。。。
如何在C#中使用WebClient将数据发布到特定的URL
- 复制当前url按钮-Javascript
- JavaScript”;复制“;HTML表单
- 在Javascript中复制C#服务器端验证
- 如何在Javascript中实现剪切、复制和粘贴功能
- 复制Javascript日期选择器
- 未复制JavaScript原型
- 阻止人们复制JavaScript代码
- 设置/复制javascript计算样式从一个元素到另一个元素
- 我正在克隆/复制javascript对象.我做得对吗
- 复制 JavaScript 原型实例
- 如何复制JavaScript's的提示函数在一个带有密码字段的新模式中
- 当通过引用而不是按值复制 JavaScript 值时,是否有任何经验法则
- 如何在Objective-C中复制JavaScript unescape()函数
- JQuery使用ajax复制javascript到文档
- 在php中复制javascript数组
- 按值复制Javascript DOM对象
- 复制Javascript对象到另一个对象,不创建新的属性
- 复制 JavaScript 画布中的磁贴区域
- 无法复制javascript中的对象属性
- 复制Javascript "Class"对象的原型