Как мне дублировать этот JavaScript в C # - PullRequest
0 голосов
/ 27 марта 2012

Вот 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&currentpagenumberbottom=1&filtername=&currentpagenumber=1&quotaactionlink=/mgr/app/action/storage.VivolQuotaAction&ascending=true&currentpagesize=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

Ответы [ 3 ]

0 голосов
/ 27 марта 2012

Ваш javascript просто устанавливает значения формы для того, что, вероятно, является скрытыми полями в форме перед выполнением отправки. Вам нужно будет сделать запрос POST, так же, как вы делаете для входа в систему.

Посмотрите на значение действия в теге формы в вашем HTML, чтобы определить, куда отправить данные, и поместите следующие элементы формы в ваши postData:

  1. selectFS_devId
  2. selectFS_currentNameSpace
  3. selectFS_evsId

Вы можете использовать что-то вроде:

string postData = string.Format("selectFS_currentNameSpace={0}&selectFS_evsId={1}&selectFS_devId={2}", "", "2", "all");

Похоже, это будет связано с тем, что, похоже, он выполняет какую-то форму отслеживания сеанса или транзакции с использованием selectFS_uniqueId, вам, вероятно, придется сначала выполнить операцию GET, а затем извлечь это значение из формы. Также обратите внимание, что ваше местоположение отправки, как и в предыдущем j_security_check, не отправляется в то же место для POST (допроцесс), что и GET (doprepare), который извлекает форму.

GET https://mgr/app/action/storage.SelectFileSystemAction/eventsubmit_doprepareselectfilesystem/ignored

POST 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

Вместо того, чтобы писать все эти вещи для эмуляции пользователя, выполняющего операции через веб-интерфейс, проверили ли вы с помощью F5, есть ли у них веб-сервисы, к которым вы можете обратиться для этого?

0 голосов
/ 28 марта 2012

Возможно, проблема в том, что параметры в этой форме "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

0 голосов
/ 27 марта 2012

Я думаю, что ваш вопрос слишком длинный для того, что вы спрашиваете. к тому же вы не указали код публикации в браузере.

кажется, что вы просто хотите узнать, как заставить работать сообщение формы ... Я заметил, что вы не устанавливаете свойство contentlength ... которое может иметь к этому отношение. Кроме того, проверьте этот "пост" ...

Как разместить данные на определенный URL с помощью WebClient в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...