tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルHTTPサーバーにPOST要求してログイン
記事No10018
投稿日: 2010/03/21(Sun) 22:25
投稿者keisuke
お世話になっています。
WINDOWS7   VB2008Express Edition で開発しています。

IE8でログインが必要なWEBに対して色々な操作をしていましたが、
webClientを使用して送受信をトライしています。

URL01 = "https://mobile.rakuten-sec.co.jp/fopweb/IMFR000_002_doLogin.do?"
URL03 = "loginid=" & IDD(0, 1) & "&password=" & IDD(0, 2) & "&forward=3&fop=fop"
objIE(W).Navigate(URL01 & URL03)

これを動作しますと、ログインはできました。(IDDにはSTRINGが入っています)
下のコーディングを動作させると <ログインIDもしくはログインパスワードが誤っております>
となります。

Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(932)とSystem.Text.Encoding.GetEncoding("EUC-JP")を932,51932,50220,50221,65001,utf-16
と試してみましたがログインできません.
http://dobon.net/vb/dotnet/internet/webrequestpost.html#application
http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html
も試してみましたが駄目でした。
objIE(W).Navigate(URL01 & URL03)ではログインできますので、問題は
URL03 = "loginid=" & IDD(0, 1) & "&password=" & IDD(0, 2) & "&forward=3&fop=fop"
の変換だと思いますが、何か見落としていることは無いでしょうか?
また、ログインした後ですとwebClientで送受信はできていますので、ログインが問題だと思いますが、良いアドバイスはいただけないでしょうか、よろしくお願いします。

 悩んでいる箇所です。

URL01 = "https://mobile.rakuten-sec.co.jp/fopweb/IMFR000_002_doLogin.do?"
URL02 = "loginid=" & IDD(0, 1) & "&password=" & IDD(0, 2) & "&forward=3" _         & "&fop=fop"
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("EUC-JP")’ここを変えてみた

   'POST送信する文字列を作成
Dim postData As String = System.Web.HttpUtility.UrlEncode(URL02, enc)
URL02 = postData
url = URL01 & URL02
’’送信部です
   Dim webClient As New System.Net.WebClient()
   Dim sr As System.IO.Stream = webClient.OpenRead(url)
   Dim srRead As New System.IO.StreamReader _
    (sr, System.Text.Encoding.GetEncoding(932))’ここを変えてみた
   S_gamen = srRead.ReadToEnd()
   srRead.Close()
   Debug.Print(S_gamen)
   Debug.Print(url)

’結果 ログインIDもしくはログインパスワードが誤っております。

ソースの抜粋です。

method="post">ログインID
<input type="text" name="loginid" size="8" maxlength="8" value="">

ログインパスワード
   <input type="password" name="password" size="9" maxlength="8" value="">

<select name="forward"><option value="3">先物OPメニュー一覧
</option><option value="79">マーケットアロー(メール)登録
</option><option value="20">取引ルール
</option></select>
<input type="submit" value="ログイン">
<input type="hidden" name="fop" value="fop"></form>

<font color="#FF0000">!
</font>このサイトは先物OP口座を開設されたお客様のみご利用可能です。

[ツリー表示へ]
タイトルRe: HTTPサーバーにPOST要求してログイン
記事No10019
投稿日: 2010/03/22(Mon) 09:02
投稿者魔界の仮面弁士
> objIE(W).Navigate(URL01 & URL03)
> これを動作しますと、ログインはできました。(IDDにはSTRINGが入っています)
その操作だと、POST ではなく GET メソッドで要求する事になるかと思います。

> 下のコーディングを動作させると <ログインIDもしくはログインパスワードが誤っております>
> となります。
実際の通信内容が、どのような内容になっているのかは調べてみましたか?
http://www.fiddler2.com/Fiddler2/version.asp
http://hide.maruo.co.jp/software/inetspy.html

> Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(932)と
> System.Text.Encoding.GetEncoding("EUC-JP")を932,51932,50220,50221,65001,utf-16
> と試してみましたがログインできません.
通常の手続きと同じ文字列が得られたのは、どのエンコードを使った場合でしたか?

> URL02 = postData
変換された URL02 の内容は、適切な内容になっているのでしょうか?

> 問題は
> URL03 = "loginid=" & IDD(0, 1) & "&password=" & IDD(0, 2) & "&forward=3&fop=fop"
> の変換だと思いますが、何か見落としていることは無いでしょうか?
そのサイトが求めるパラメーターが分からないので、これだけでは何とも…。

Cookie や User-Agent 等でブロックされているケースも無いとは言えませんし。

[ツリー表示へ]
タイトルRe^2: HTTPサーバーにPOST要求してログイン
記事No10020
投稿日: 2010/03/22(Mon) 12:23
投稿者keisuke
おはようございます、 魔界の仮面弁士様。

>実際の通信内容が、どのような内容になっているのかは調べてみましたか?
調べてみましたです。
>通常の手続きと同じ文字列が得られたのは、どのエンコードを使った場合でしたか?
932でした。

>変換された URL02 の内容は、適切な内容になっているのでしょうか?
これが、不明です。(自分では変換はされていると思いますが)
>Cookie や User-Agent 等でブロックされているケースも無いとは言えませんし。
Cookie_は他のパターンでOKなもので調べましたが、、、 User-Agent は調べてませんので、調べてみます。
もう少し、提示いていただいた、サイトを見て確認してみます。
魔界の仮面弁士様、いつもありがとうございます。

[ツリー表示へ]
タイトルRe^2: HTTPサーバーにPOST要求してログイン
記事No10021
投稿日: 2010/03/22(Mon) 23:09
投稿者keisuke
こんばんは、です、
色々、調べたり、他の方法をトライしてみましたが、、、、、

> 実際の通信内容が、どのような内容になっているのかは調べてみましたか?

GET http://mobile.rakuten-sec.co.jp/favicon.ico HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; YTB720; GTB6.3; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Media Center PC 5.0; SLCC1; Tablet PC 2.0; Lunascape 6.0.3.20663)
Host: mobile.rakuten-sec.co.jp
Pragma: no-cache
Cookie: s_pers=%20s_vnum%3D1269189115610%2526vn%253D32%7C1269189115610%3B%20s_sec-pn%3D%255Bmember%255Dapp%253Acom_web_order_direct%7C1269070909743%3B%20s_invisit%3Dtrue%7C1269070909750%3B%20mem%3Dy%7C1276845109756%3B%20s_nr%3D1269069109762-Repeat%7C1276845109762%3B; mbox=PC#1258355569504-924597.18#1270269372|check#true#1269059832|session#1269059757115-605053#1269061632; LATEST_LOGOUT_DATE=Wed%2C%2024%20Feb%202010%2006%3A24%3A49%20UTC;



> 通常の手続きと同じ文字列が得られたのは、どのエンコードを使った場合でしたか?
**932です。
> > URL02 = postData
> 変換された URL02 の内容は、適切な内容になっているのでしょうか?
** 多分


> Cookie や User-Agent 等でブロックされているケースも無いとは言えませんし。
Cookieのあるほかのサイトで動作するもので試してみましたが駄目でした。
POSTでなく、GETでも試してみました、、、

で結局下のコーディングでできました。ありがとうございます。
User-Agentの関係ですね。

Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis")
Dim wc As WebClient = New WebClient()
  wc.Headers.Add("User-Agent", _
              "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1)")

  Dim nvc As NameValueCollection = New NameValueCollection()
        nvc.Add("loginid", "********")
        nvc.Add("password", "****")
        nvc.Add("forward", "3")
        nvc.Add("fop", "fop")

        wc.QueryString = nvc

Dim result As Byte() = _
     wc.DownloadData("https://mobile.rakutenec.co.jp/fopweb/IMFR000_002_doLogin.do")
Dim html As String = enc.GetString(result)

[ツリー表示へ]