線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4725
推到 Plurk!
推到 Facebook!

有關 http.post 到網頁的問題

答題得分者是:RaynorPao
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-05 11:19:31 IP:61.66.xxx.xxx 未訂閱
請問各位:    先申明, 我已經找了本站的資料兩天, 但實在看不到有效的解決方案, 只好 在此請求各位的協助 另外, 我使用 Delphi5+win98+Indy 8 + IE5.5發展    我的需求 1.用DELPHI開發一支只有四個EDIT的程式 URL(網址), LTDID(公司代碼), USERID(使用者代碼), USERPASS(使用者密碼) 2.已有開發好的 LOGINcheck.ASP程式, 內有三組參數接收         ltdid= Request.Form("LtdID")         usrid= Request.Form("UserID")         usrpd= Request.Form("Password") 3.客戶要求讓他們的使用者由delphi寫的程式來登入, 輸入edit資料後, 可以   把edit資料送到server網頁的logincheck.asp中登入, 同時要進入ie開啟   logincheck.asp(logincheck.asp沒有client的畫面, 純粹是一支檢查   password是否合法的asp), 如果通過, 由logincheck 自動開啟下一個畫面   如果不通過, 一樣由logincheck.asp 開啟 login.asp畫面(此為網頁上的   登入首頁)    也就是說, 客戶的要求, 第一次啟動一定是要由我提供的 delphi程式來執行 如果成功則往一步, 如果不成功則回到原來公司的首頁, 由網頁進行登入行為    已找到的做法 1.得知可以用IdHTTP元件將資料POST回指定的URL, 同時測試已通過   (本段已在本站的資訊中找到方法) 2.如何在idHTTP通過運行後, 開啟IE, 同時進入指定的URL中(重點:不能使用   自行開發的 WEBERBROWSER, 只能用IE, 本段尚未找到解決), 然後關閉DELPHI   的程式, 以後都由IE來控制 3.在IE的網址上不可以秀出 htt://www.xxx.com.tw/logincheck.asp?ltdid=LTDNAME&usrid=001&usrpd=111紅色這段代入參數, 否則失去 password的功能了 註: 如果由公司首頁進行登入行為(LOGIN.ASP->LOGINCHECK.ASP)是OK的 不知這樣, 各位清楚否! 能否協助小弟提供一些參考資料, 謝謝!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-05 11:51:40 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位: 先申明, 我已經找了本站的資料兩天, 但實在看不到有效的解決方案, 只好 在此請求各位的協助 另外, 我使用 Delphi5+win98+Indy 8 + IE5.5發展 我的需求 1.用DELPHI開發一支只有四個EDIT的程式 URL(網址), LTDID(公司代碼), USERID(使用者代碼), USERPASS(使用者密碼) 2.已有開發好的 LOGINcheck.ASP程式, 內有三組參數接收 ltdid= Request.Form("LtdID") usrid= Request.Form("UserID") usrpd= Request.Form("Password") 3.客戶要求讓他們的使用者由delphi寫的程式來登入, 輸入edit資料後, 可以 把edit資料送到server網頁的logincheck.asp中登入, 同時要進入ie開啟 logincheck.asp(logincheck.asp沒有client的畫面, 純粹是一支檢查 password是否合法的asp), 如果通過, 由logincheck 自動開啟下一個畫面 如果不通過, 一樣由logincheck.asp 開啟 login.asp畫面(此為網頁上的 登入首頁) 也就是說, 客戶的要求, 第一次啟動一定是要由我提供的 delphi程式來執行 如果成功則往一步, 如果不成功則回到原來公司的首頁, 由網頁進行登入行為 已找到的做法 1.得知可以用IdHTTP元件將資料POST回指定的URL, 同時測試已通過 (本段已在本站的資訊中找到方法) 2.如何在idHTTP通過運行後, 開啟IE, 同時進入指定的URL中(重點:不能使用 自行開發的 WEBERBROWSER, 只能用IE, 本段尚未找到解決), 然後關閉DELPHI 的程式, 以後都由IE來控制 3.在IE的網址上不可以秀出 htt://www.xxx.com.tw/logincheck.asp?ltdid=LTDNAME&usrid=001&usrpd=111紅色這段代入參數, 否則失去 password的功能了 註: 如果由公司首頁進行登入行為(LOGIN.ASP->LOGINCHECK.ASP)是OK的 不知這樣, 各位清楚否! 能否協助小弟提供一些參考資料, 謝謝!
P.D. 你好: 試試看以下的做法,看看可不可以呢?? 如果在你的 ASP 裡面有用到「response.redirect」指令的話 在 IdHTTP1.Post(...); 之後,會被導向另一個新的網頁(URL) 而這個 URL 的字串,你可以經由 IdHTTP1.URL.URI 取得 取得以後再利用 ShellExecute 開啟這個網頁 --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-05 14:20:59 IP:210.243.xxx.xxx 未訂閱
嗯, 看了 P.D. 兄的需求.. 可能要直接操控 IE 才有辦法了  因為
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-05 17:54:54 IP:61.66.xxx.xxx 未訂閱
引言: P.D. 你好: 試試看以下的做法,看看可不可以呢?? 如果在你的 ASP 裡面有用到「response.redirect」指令的話 在 IdHTTP1.Post(...); 之後,會被導向另一個新的網頁(URL) 而這個 URL 的字串,你可以經由 IdHTTP1.URL.URI 取得 取得以後再利用 ShellExecute 開啟這個網頁 -- >< face="Verdana, Arial, Helvetica"> 謝謝 RaynorPao 的想法, 不過可能有點問題 1.判斷記錄存在與否是由 logincheck.asp 執行, 而非我的程式 2.logincheck.asp 中確有 redirect 的指向(通行則指向下一頁, 否則回到login.asp) 3.如何才能由http.post()下達到 logincheck.asp, 然後由logincheck執行 結果再傳回來及何時要接下來做shellexecute, 目前我可能想不到有什麼方法可以做! 謝謝!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-05 18:22:47 IP:61.66.xxx.xxx 未訂閱
引言: 嗯, 看了 P.D. 兄的需求.. 可能要直接操控 IE 才有辦法了 因為 >< face="Verdana, Arial, Helvetica"> 感謝shaofu提供的網址, 我曾經上去看過, 似乎沒有提供我這方面需求的功能
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-05 20:56:55 IP:61.221.xxx.xxx 未訂閱
引言: 謝謝 RaynorPao 的想法, 不過可能有點問題 1.判斷記錄存在與否是由 logincheck.asp 執行, 而非我的程式 2.logincheck.asp 中確有 redirect 的指向(通行則指向下一頁, 否則回到login.asp) 3.如何才能由http.post()下達到 logincheck.asp, 然後由logincheck執行 結果再傳回來及何時要接下來做shellexecute, 目前我可能想不到有什麼方法可以做! 謝謝!
P.D. 你好: 小弟我使用 BCB 6.0 Update 4, Indy 9.00.11, Windows 2000 SP3 測試的結果應該是可行的喔< >,請參考以下的範例程式碼< >
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdHTTP1->HandleRedirects=true;
   TStringList *sl=new TStringList;
   sl->Add("ID=1");
   sl->Add("PWD=1");
   IdHTTP1->Post("http://localhost/login/login_check.asp", sl);
   ShowMessage(IdHTTP1->URL->URI); // 此行用來驗證傳回的 URL 是否正確?
   ShellExecute(NULL, "open", IdHTTP1->URL->URI.c_str(), NULL, NULL, SW_SHOWNORMAL);
   delete sl;
}
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-05 22:33:38 IP:61.66.xxx.xxx 未訂閱
引言: P.D. 你好: 小弟我使用 BCB 6.0 Update 4, Indy 9.00.11, Windows 2000 SP3 測試的結果應該是可行的喔< >,請參考以下的範例程式碼< >
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdHTTP1->HandleRedirects=true;
   TStringList *sl=new TStringList;
   sl->Add("ID=1");
   sl->Add("PWD=1");
   IdHTTP1->Post("http://localhost/login/login_check.asp", sl);
   ShowMessage(IdHTTP1->URL->URI); // 此行用來驗證傳回的 URL 是否正確?
   ShellExecute(NULL, "open", IdHTTP1->URL->URI.c_str(), NULL, NULL, SW_SHOWNORMAL);
   delete sl;
}
-- Enjoy Researching & Developing --
RaynorPao兄, 先感謝你的測試 兩個問題再請教 ShowMessage(IdHTTP1->URL->URI)驗證傳回的 URL 是否正確 這是指只要post出去的url是可以連線就表正確, 還是其他狀況? 因為我要的模式其實只是由delphi送出 post 命令(含參數), 然後開啟IE, 由SERVER的ASP SCRIPT接收(REQUEST)參數來CHECK record, 再由ASP決定往上或往下行為, 另外, 你測試的模式indy9 IdHTTP1->URL->URI, indy 8似乎沒有這項功能, 我沒有辦法可以測試delphi中是否可用, 不知還有沒有其他方法?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-05 23:51:14 IP:61.221.xxx.xxx 未訂閱
引言: RaynorPao兄, 先感謝你的測試 兩個問題再請教 ShowMessage(IdHTTP1->URL->URI)驗證傳回的 URL 是否正確 這是指只要post出去的url是可以連線就表正確, 還是其他狀況? 因為我要的模式其實只是由delphi送出 post 命令(含參數), 然後開啟IE, 由SERVER的ASP SCRIPT接收(REQUEST)參數來CHECK record, 再由ASP決定往上或往下行為, 另外, 你測試的模式indy9 IdHTTP1->URL->URI, indy 8似乎沒有這項功能, 我沒有辦法可以測試delphi中是否可用, 不知還有沒有其他方法?
P.D. 你好: ShowMessage(IdHTTP1->URL->URI); // 驗證傳回的 URL 是否正確 Post 到 logincheck.asp 的 ID 及 PWD 會先經過確認,最後才決定導向登錄 成功或登錄失敗的網頁,但是不管結果如何 IdHTTP1->URL->URI 所得到的字串 ,就是 logincheck.asp 導向另一個網頁的 URL 另外, 你測試的模式indy9 IdHTTP1->URL->URI, indy 8似乎沒有這項功能, 我沒有辦法可以測試delphi中是否可用, 不知還有沒有其他方法? 不好意思,小弟我目前很直覺的只想到這個辦法,如果可以的話,不妨試試去下 載 Indy 9.00.11 來試試看,如果不行的話,我再另外花時間想一想有沒有其他 的方式 -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
cuteysc
初階會員


發表:16
回覆:37
積分:35
註冊:2003-05-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-06 19:04:13 IP:61.216.xxx.xxx 未訂閱
引言:
引言: P.D. 你好: 小弟我使用 BCB 6.0 Update 4, Indy 9.00.11, Windows 2000 SP3 測試的結果應該是可行的喔< >,請參考以下的範例程式碼< >
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdHTTP1->HandleRedirects=true;
   TStringList *sl=new TStringList;
   sl->Add("ID=1");
   sl->Add("PWD=1");
   IdHTTP1->Post("http://localhost/login/login_check.asp", sl);
   ShowMessage(IdHTTP1->URL->URI); // 此行用來驗證傳回的 URL 是否正確?
   ShellExecute(NULL, "open", IdHTTP1->URL->URI.c_str(), NULL, NULL, SW_SHOWNORMAL);
   delete sl;
}
-- Enjoy Researching & Developing --
RaynorPao兄, 先感謝你的測試 兩個問題再請教 ShowMessage(IdHTTP1->URL->URI)驗證傳回的 URL 是否正確 這是指只要post出去的url是可以連線就表正確, 還是其他狀況? 因為我要的模式其實只是由delphi送出 post 命令(含參數), 然後開啟IE, 由SERVER的ASP SCRIPT接收(REQUEST)參數來CHECK record, 再由ASP決定往上或往下行為, 另外, 你測試的模式indy9 IdHTTP1->URL->URI, indy 8似乎沒有這項功能, 我沒有辦法可以測試delphi中是否可用, 不知還有沒有其他方法?
INDY8 IdHTTP 回傳值在POST方法的最後一個參數 TMemoryStream *SMSms=new TMemoryStream; HTTP1->Post("http://api.twsms.com/SendSMS.php",SMSsl,SMSms); SMSms->Position=0; 這樣便可以取得回傳資料 .. Y.S.C.
現任:Programmer 深度論壇 BCB Internet 版主
http://www.chatking.net 聊天王 語音聊天社群 創辦人
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-07 12:21:30 IP:61.66.xxx.xxx 未訂閱
引言: INDY8 IdHTTP 回傳值在POST方法的最後一個參數 TMemoryStream *SMSms=new TMemoryStream; HTTP1->Post("http://api.twsms.com/SendSMS.php",SMSsl,SMSms); SMSms->Position=0; 這樣便可以取得回傳資料 .. Y.S.C.
現任:Programmer 深度論壇 BCB Internet 版主
http://www.chatking.net 聊天王 語音聊天社群 創辦人
實在真不好意思, 還驚動了 cuteysc 大人, 我先貼上這段的 code
procedure TForm1.Button1Click(Sender: TObject);
          Var aStream: TStringStream;
              Params: TStringList;
begin
     aStream := TSTringStream.Create('');
     Params := TStringList.create;
     idHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
     try
        with idHTTP1 do begin
          try
             params.text:= '&StationNo=A00&005&Password=555';
             idHTTP1.Post('http://www.xxx.xxx.tw/logon/LogonCheck.asp',Params,aStream);
             memo1.Text:= astream.DataString;
             memo1.Lines.Add(idHTTP1.ResponseText);
          except
             on E: Exception do
                showmessage('Error encountered during POST: ' + E.Message);
          end;
        end;
     except
     end;
end;    
這段是 logoncheck.asp內容
<!-- #include virtual = "/ASPfunc/DB.fun" -->
<%
        Response.Expires = -1
        Response.AddHeader "Pragma", "no-cache"
        Response.AddHeader "cache-control", "no-store"            ustno= Request.Form("StationNo")
        usrid= Request.Form("UserID")
        usrpd= Request.Form("Password")
        SQL =  " select  USERSTATION, USERID, USERPASSWORD, USERNAME, USERLEVEL, MACHINETYPE from USERIN where " 
        SQL = SQL & " USERSTATION='" & ustno & "'" & " and "
        SQL = SQL & " '" & usrid & "'" & " and "
        SQL = SQL & " USERPASSWORD='" & usrpd & "'"
         set conn = GetSQLServerConnection("www.xxx.xxx.tw","sqlid","sqlpass","dbfname")
        set conn = GetSQLServerConnection
        set rs = GetSQLServerStaticRecordSet(conn,SQL)            If not rs.Eof then 
                Session("snUserID")        = rs.Fields.Item("UserID").Value
                Session("snUserName")        = rs.Fields.Item("UserName").Value
                Session("snStationNo")        = rs.Fields.Item("UserStation").Value
                Session("snMachineType")        = rs.Fields.Item("MachineType").Value
                Session("snUserLevel")        = cStr(rs.Fields.Item("UserLevel").Value)        
                Session("snDate")         = cStr(Date())
                Session("snTime")         = cStr(Time())
                Response.Redirect "AirWarningCheck.asp"
                Response.end
        Else
                Response.Redirect "LogonFail.asp"
                Response.end
        End If
%>    <html>
<head>
<title>登入權限檢查</title>
</head>
<body>
</body>
</html>    
set conn = GetSQLServerConnection("www.xxx.xxx.tw","sqlid","sqlpass","dbfname") 部份是連結公司的sql內容, 抱歉無法公開, 但可以確定的是 logoncheck.asp 的上一頁是 logon.asp, 如果由 logon.asp 進去登入id,pass後到 logoncheck.asp 是可以正常work的, 我現在想由delphi直接取代logon.asp的功能, 把stationno,userid, userpd代入到 logoncheck.asp中, 但一直發生 "302 Object Moved"的錯誤 但如果我把 ('http://www.xxx.xxx.tw/logon/LogonCheck.asp',Params,aStream); 改為 ('http://www.xxx.xxx.tw/logon/Logon.asp',Params,aStream); 則可以過, 而且idhttp會把 logon.asp內容下載到 memo1上 不知道 cuteysc 兄是否能發現問題的所在, 謝謝! 發表人 - P.D. 於 2003/06/07 12:29:46
rose751231
一般會員


發表:3
回覆:17
積分:4
註冊:2002-12-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-07 20:01:24 IP:61.70.xxx.xxx 未訂閱
P.D兄: 您的問題有幾個盲點,使用Delphi自動登入ASP是沒有問題的,但是登入之後若再啟動IE的話,那Session就會變成不一樣了,所以就沒輒了!但是反過來說,您可以用Delphi登入ASP沒問題後,再利用IE重新登入一次(注意是重新再連一次,這樣就可以確保Session是最新的),但是要注意的一點是要將userid, password不顯示在網址列,若登入不成功再利用ASP傳回的參數執行失敗的網頁即可。 另外,您傳遞參數至ASP的方法是錯的,所以會得到302的錯誤,或許您可以打電話給陳大哥,他有一支程式可作此一功能。 發表人 - rose751231 於 2003/06/07 20:08:20
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-09 09:51:05 IP:210.243.xxx.xxx 未訂閱
我覺得.. P.D. 兄的需求直接去操控 IE 比較適當.. IE 這個 Automation 提供了一個 WebBrowser Control, 裏面有個 Navigate 方法.. 可以傳 Post 資料, 也能改 HTTP Header.. 沒時間 try.. 詳細資料可以參考 MS 的網站.. http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/browser_control_node_entry.asp 剛好 Delphi 也直接幫你 import 進來了, 可以拿來用... ( Internet -> WebBrowser )
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-09 13:30:28 IP:211.78.xxx.xxx 未訂閱
引言: 我覺得.. P.D. 兄的需求直接去操控 IE 比較適當.. IE 這個 Automation 提供了一個 WebBrowser Control, 裏面有個 Navigate 方法.. 可以傳 Post 資料, 也能改 HTTP Header.. 沒時間 try.. 詳細資料可以參考 MS 的網站.. http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/browser_control_node_entry.asp 剛好 Delphi 也直接幫你 import 進來了, 可以拿來用... ( Internet -> WebBrowser )
謝謝各位提供各方的資訊, 不過現看來似乎仍有很大的難題存在, 但是也得到 一個方向, 雖然目前我並不清楚如何運用, 可能要花一段時間來研究, 如果到時 有心得再公布給各位知道, 如果各位有進一步的方法, 也期待能一起分享討論, 謝謝! 另外, 我無法用webBrowser方式來做, 因為客戶要求要全部在IE上操控. 發表人 - P.D. 於 2003/06/09 13:32:12
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-09 13:43:28 IP:61.221.xxx.xxx 未訂閱
RaynorPao 你看看那本 網路四大服務 那本書 理面的範例 好像可以引用 某部份 書已在你那了包仔 P.D 兄你再問問 包仔把 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-06-09 14:55:20 IP:210.243.xxx.xxx 未訂閱
P.D. 兄請參考 
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-06-09 17:15:51 IP:211.78.xxx.xxx 未訂閱
引言: P.D. 兄請參考 >< face="Verdana, Arial, Helvetica"> 實在很感~~~~激 shaofu 兄的sample, 我試了之後果然可以過!
系統時間:2024-05-09 6:59:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!