有關 http.post 到網頁的問題 |
答題得分者是:RaynorPao
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位: 先申明, 我已經找了本站的資料兩天, 但實在看不到有效的解決方案, 只好
在此請求各位的協助
另外, 我使用 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 發送簡訊給我 |
引言: 請問各位: 先申明, 我已經找了本站的資料兩天, 但實在看不到有效的解決方案, 只好 在此請求各位的協助 另外, 我使用 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 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 謝謝 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 發送簡訊給我 |
引言: P.D. 你好: 小弟我使用 BCB 6.0 Update 4, Indy 9.00.11, Windows 2000 SP3 測試的結果應該是可行的喔< >,請參考以下的範例程式碼< >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中是否可用, 不知還有沒有其他方法?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
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言:INDY8 IdHTTP 回傳值在POST方法的最後一個參數 TMemoryStream *SMSms=new TMemoryStream; HTTP1->Post("http://api.twsms.com/SendSMS.php",SMSsl,SMSms); SMSms->Position=0; 這樣便可以取得回傳資料 .. Y.S.C.引言: P.D. 你好: 小弟我使用 BCB 6.0 Update 4, Indy 9.00.11, Windows 2000 SP3 測試的結果應該是可行的喔< >,請參考以下的範例程式碼< >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中是否可用, 不知還有沒有其他方法?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 -- 現任:Programmer 深度論壇 BCB Internet 版主 http://www.chatking.net 聊天王 語音聊天社群 創辦人 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: INDY8 IdHTTP 回傳值在POST方法的最後一個參數 TMemoryStream *SMSms=new TMemoryStream; HTTP1->Post("http://api.twsms.com/SendSMS.php",SMSsl,SMSms); SMSms->Position=0; 這樣便可以取得回傳資料 .. Y.S.C.實在真不好意思, 還驚動了 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 發送簡訊給我 |
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 發送簡訊給我 |
我覺得.. 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 發送簡訊給我 |
引言: 我覺得.. 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 發送簡訊給我 |
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 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |