2012-03-27 5 views
0

にこのJavaScriptを複製しないことはここではJavaScriptどのように私はここでのC#

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#コードは、私は問題はmyTargetStringがロードされない文字列である

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); 

を使用していますですjavascript params、もし私が上記のStreamWriterでやったように、それらのparamsを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= 

フィドラーは私が必要とする、そこにelectFS_devId=allselectFS_evsId=2を見ることができます。この

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 

を私に提供:私は、URLに何を意味

using (StreamWriter requestWriter = new StreamWriter(requestStream, Encoding.ASCII)) 
      { 
       string postData = "j_username=user&j_password=user&submit=Send"; 
       requestWriter.Write(postData); 
      } 

は、おそらくのようなものですEVSIDを変更するにはどうすればよいのでしょうか?はい、私はクッキーIDを変更しました

答えて

0

使いのブラウザではJavaScriptがちょうどおそらく提出実行する前に、フォーム上のフィールドを隠されている何のためにフォームの値を設定している...この「ポスト」をチェックしてください。ログインの場合と同じように、POSTリクエストを行う必要があります。

データを提出し、あなたのPOSTDATAに次のフォーム項目を配置するかを決定するためにあなたのHTMLのフォームタグのアクション値を見てみましょう。

  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と同様に、送信場所は、フォームを取得するGET(doprepare)と同じPOST(dop process)の場所には向かないことに注意してください。

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

をGET 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で確認していますか?

+0

私はそれが簡単だったと思う、それらは実際にjavascript以外では存在しない –

+0

あなたは動的に作成された要素を扱っているかもしれません。プロセスはほとんど同じでなければなりません。あなたはそれを試したとき何が起こったのですか? errorContentに返されたエラーや検証の警告について調べましたか?例外がスローされましたか?また、フォーム上の他の入力要素の値を、JavaScriptが動作しないようにする必要があるかもしれません。 – JamieSee

+0

しかし、戻ってくるものはページですが、内容は読み込まれません。 –

-1

私はあなたの質問はあなたが求めているもののために長い道のりだと思います。あなたはブラウザの投稿に関するコードを表示していませんでした。

フォームポストを取得する方法を知りたいと思っているようです...私はあなたがcontentlengthプロパティを設定していないことに気付きました。また、

How to post data to specific URL using WebClient in C#

+0

申し訳ありませんが、私は従っていないを使用することができます。理論的なURLを投稿しました。明らかにURLは機能しません。どのコードがブラウザの「投稿」を探していますか? URLは変更されません... –

+0

私はあなたが書いたものに従いません。私たちは同じ会話ですか? – Timmerz

0

たぶんploblemは、この形式のパラメータ「j_username =ユーザー& j_passwordというは=ユーザー&を提出=送信」、ということであるあなたは、このようにパラメータを取得しようとすることができ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

関連する問題