0

フォームによって結果が投稿された Web サイトの応答を取得したいと考えています。WebClient、WebRequests などを使ってみました。

現在のコード:

using (var client = new WebClient())
{
    var buffer = client.UploadValues("https://secure.monroecc.edu/pls/bpr1/bwzkfcls.P_GetCrse", "POST", vals);
    return Encoding.UTF8.GetString(buffer, 0, buffer.Count());
}

また、現在のコードが間違っていないことを確認してください。何かが欠けているだけです。Web サイトの応答を受け取ったとき、それは間違っています。それは、フォームに記入するページです。

Web サイトを GET しようとすると、Web サイト自体で次のエラーが発生します (それに付随する変数を投稿せずに):

VARIABLES IN FORM NOT IN PROCEDURE: 
NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: TERM_IN,SEL_SUBJ,SEL_CRSE,SEL_TITLE,BEGIN_HH,BEGIN_MI,BEGIN_AP,SEL_DAY,SEL_PTRM,END_HH,END_MI,END_AP,SEL_CAMP,SEL_SCHD,SEL_SESS,SEL_INSTR,SEL_ATTR,SEL_LEVL,SEL_INSM

DAD name: bpr1
PROCEDURE  : bwzkfcls.P_GetCrse
URL        : http://secure.monroecc.edu:63500/pls/bpr1/bwzkfcls.P_GetCrse
PARAMETERS :
===========

送信中のリクエストのイメージを次に示します。(Chromeで閲覧)

クロームビュー

Web サイトで Oracle PLSQL が使用されていることは知っていますが、これも検索結果の取得に役立たないようです。

4

3 に答える 3

0

次のコードを使用してフォームを投稿しました。

private void Run(string[] args)
        {
            NameValueCollection vals = new NameValueCollection();
            vals.Add("TERM_IN", "");
            vals.Add("SEL_SUBJ", "");
            vals.Add("SEL_CRSE", "");
            vals.Add("SEL_TITLE", "");
            vals.Add("BEGIN_HH", "");
            vals.Add("BEGIN_MI", "");
            vals.Add("BEGIN_AP", "");
            vals.Add("SEL_DAY", "");
            vals.Add("SEL_PTRM", "");
            vals.Add("END_HH", "");
            vals.Add("END_MI", "");
            vals.Add("END_AP", "");
            vals.Add("SEL_CAMP", "");
            vals.Add("SEL_SCHD", "");
            vals.Add("SEL_SESS", "");
            vals.Add("SEL_INSTR", "");
            vals.Add("SEL_ATTR", "");
            vals.Add("SEL_LEVL", "");
            vals.Add("SEL_INSM", "");

            using (var client = new WebClient())
            {
                var buffer = client.UploadValues("https://secure.monroecc.edu/pls/bpr1/bwzkfcls.P_GetCrse", "POST", vals);
                Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, buffer.Count()));
                //Console.Read();
            }
        }

フォームが正しく受信されたことを示す 200 ステータス コードと有効な html が返されます。ただし、正しい値がないため、返されたページには、含める必要があるフォーム要素が欠落していると表示されます (NAME NOT FOUND FOR PIDM: )。

受け取ったパラメーターの不一致エラーは、渡したパラメーターが、ストアド プロシージャが期待するものではないことを意味します。最初にパラメーターと期待値の正確なリストを取得する必要があります。次に、それらをプラグインするだけで機能します。残念ながら、ページは 200 ステータス コードを返すため、エラーが発生したかどうかを解析する必要があります。

于 2012-10-10T20:24:59.083 に答える
0

POST の代わりに GET リクエストを使用します。

于 2012-09-30T01:38:50.747 に答える
0

結果を可能にするフォーム変数を実際に受け取っていないときに、結果セットを提供するフォームに従うページを要求しています。

変数valsのセットを渡す必要がある変数は決して渡しません。

VARIABLES IN FORM NOT IN PROCEDURE: 
NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: TERM_IN,SEL_SUBJ,SEL_CRSE,SEL_TITLE,BEGIN_HH,BEGIN_MI,BEGIN_AP,SEL_DAY,SEL_PTRM,END_HH,END_MI,END_AP,SEL_CAMP,SEL_SCHD,SEL_SESS,SEL_INSTR,SEL_ATTR,SEL_LEVL,SEL_INSM

この応答エラーは、リストされている変数をまったく受け取っていないことを示しています。あなたのコードで、名前を付けて変数のリストを Collection に割り当てた場所までさかのぼりますvals。正しいスペルと適切な割り当てを確認してください。

于 2012-10-04T14:46:35.210 に答える