TidHttp用法! |
答題得分者是:pcboy
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
>我只知道一個HTTP地址的情況,怎麽樣來判斷那個地址下有沒有文件存在呢? 根據回傳的資訊去判斷 >如果存在的話,我要怎樣來獲取那些文件名呢?並且要一個文件一個文件的下載下來. 這要去 Parsing 網頁內容, 找出網址, 有些網址是隱藏的, 難以 Parsing >下載完後還需把那地址下文件刪除掉,或者移動到其它的目錄下. 這要有權限才可以, 一般網站不會開這種權限 您的網站是自己架設的嗎 ? 網頁是自己寫的嗎 ? >幫忙把源代碼也帖出來好嗎?謝謝了!急! Sorry ! 沒有程式, 自助比較快 遇到瓶頸請將程式碼貼出再討論
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== >我只知道一個HTTP地址的情況,怎麽樣來判斷那個地址下有沒有文件存在呢? 根據回傳的資訊去判斷 >如果存在的話,我要怎樣來獲取那些文件名呢?並且要一個文件一個文件的下載下來. 這要去 Parsing 網頁內容, 找出網址, 有些網址是隱藏的, 難以 Parsing >下載完後還需把那地址下文件刪除掉,或者移動到其它的目錄下. 這要有權限才可以, 一般網站不會開這種權限 您的網站是自己架設的嗎 ? 網頁是自己寫的嗎 ? >幫忙把源代碼也帖出來好嗎?謝謝了!急! Sorry ! 沒有程式, 自助比較快 遇到瓶頸請將程式碼貼出再討論 謝謝你的回複信息. 我要做的程式功能是,客戶會提供一個Http地址,操作權限是對我開放的,我主要是要獲取到他這地址下的文件, 並下載下來再對這文件做相關的處理,下完文件後我必須把這些文件移走或刪除,因為我要每隔幾秒鍾就去判斷這個地 址下有沒有文件存在.這裏的文件是客戶不定時的放進來的. 還請幫忙! 1. 我怎麽來獲取他的回傳信息呢? TidHttp控件在做什麽動作後再來獲取呢? 2. 網址是知道的. 3. 權限也是開放的.所以有對那個地址的文件的刪除或移動權限. 4. 下面是我寫的一個function,他只能下載指定文件名的文件. function THttps_Frm.ConnectHttps(vHttps, vUser, vPassword, vPort: string; var vRet: integer; var vMsg: string): Boolean; var vStr: TMemoryStream; begin try vStr := TMemoryStream.Create; result := False; vRet := 0; IdAntiFreeze1.OnlyWhenIdle := False; IdHTTP1.Get(vHttps, vStr); vStr.SaveToFile('E:\TEST\TEST.TXT'); vStr.Free; result := True; except on e: exception do begin result := False; vRet := 0; vStr.Free; vMsg := 'Exception:' e.Message; end; end; end; |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
>我想知道的是我的前提是我是只知道一個Http地址,而那地址目錄裏面有什麽文件我並不知道.
>所以我必須先通過TidHttp控件來獲取到這個地址下的文件名,才能再做下載的動作呀. 該目錄要開啟 "瀏覽功能" 你只接用 IE 去看該目錄 (目錄中不要有 Web Server 預設的首頁, 可能是 default.asp, index.php, index.htm ... 等, 看 Web Server 設定為何) 如果 "瀏覽" 功能開啟, 可以直接看到檔案名稱被列出來, 就好像 DOS 下使用 dir 類似 去分析 Memo1 內容, 就知道有哪些檔案 >還有就是怎麽刪除這文件呢? http://topic.csdn.net/t/20050324/12/3877243.html
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== >我想知道的是我的前提是我是只知道一個Http地址,而那地址目錄裏面有什麽文件我並不知道. >所以我必須先通過TidHttp控件來獲取到這個地址下的文件名,才能再做下載的動作呀. 該目錄要開啟 "瀏覽功能" 你只接用 IE 去看該目錄 (目錄中不要有 Web Server 預設的首頁, 可能是 default.asp, index.php, index.htm ... 等, 看 Web Server 設定為何) 如果 "瀏覽" 功能開啟, 可以直接看到檔案名稱被列出來, 就好像 DOS 下使用 dir 類似 去分析 Memo1 內容, 就知道有哪些檔案 >還有就是怎麽刪除這文件呢? http://topic.csdn.net/t/20050324/12/3877243.html? 非常感謝你的幫忙,我現在可以獲取Http地址下的文件名, 現在正在測試刪除文件這部分,暫時還沒測試通過,有問題我會再帖出來. 謝謝了. |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== Web Server 有開放刪除權限 ? 是否有攔劫某些命令 ? 是 Windows 2000 Server IIS ? Windows 2003 Server IIS ? Apache Web Server ? 其它 ? 應該有刪除權限呀! 有沒有攔劫命令我就不知道了,不知道怎麽看呢? 我用的是Windows 2003 Server IIS. 我在做POST動作時也報出錯誤信息:HTTP/1.1 405 Method Not Allowed 下面是我通過IdHTTP1.Options();方法獲取的信息,怎麽會POST不允許呢? Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
這只能保證 IIS 開放下面命令
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK Windows 2003 上有設定 IIS 帳號可以刪除該目錄的檔案嗎 ? 在目錄上按滑鼠右鍵看權限設定
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== 這只能保證 IIS 開放下面命令 Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH Allow: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK Windows 2003 上有設定 IIS 帳號可以刪除該目錄的檔案嗎 ? 在目錄上按滑鼠右鍵看權限設定 有,我開了最大的操作權限. |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== 不然換一種作法, 寫一個 DeleteFile.asp 放站上 Client 假設抓下 abc.zip 檔案後, 送出 DeleteFile.asp?filename=abc.zip 由 DeleteFile.asp 負責刪除 abc.zip 檔案 或者改用寫 FTP Client , 不要用 IdHTTP 看來只有試試寫個DeleteFile.asp看了. 用FTP的方式我寫過,並且寫好了.現在客戶是要求我們一定要用Http的方式來做, 用來比較兩種方式對操作文件的速度,最後再由客戶使用哪種方式做的. 謝謝你一直給予的幫助. |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
想再問一個問題,為什麽我用Http://172.24.81.113/test沒問題可以正常的下載文件.
但用:Https://172.24.81.113/test就會出這個錯誤信息了:IOHandler value is not valid 我應該怎樣來處理呢? 區別是加了:SSL |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== Server 端 : IIS有啟動 HTTPS Server 嗎 ? 目錄權限設定正常嗎 ? Client 端 : 印象中 Indy 沒有將 SSL 包進去, 好像是因為高安全性的東西美國比較會管制 要另外下載安裝 (這個小弟還在研究) IIS肯定是起動了的.權限也有. 我有到網上下了兩個DLL文件:libeay32.dll 和 ssleay32.dll 現在又出現新的問題了.就是我現在可以在我本機上下載文件,但是我把DELPHI編譯 的執行程式.EXE文件放到另一台機子上就不能下載文件,兩台機的我都做了一樣的配置. Error:Could not load root certificate. |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
下面是我通過TidHttp來完成下載文件的代碼,這是在伺服器端沒有設定用戶名和密碼的情況是OK的.
但如果要求輸入用戶名和密碼的我要怎麽寫呢? 搞了半天都沒搞定. 用戶名和密碼我是知道的. function THttps_Frm.ConnectHttps(vFilePath, vHttps, vUser, vPassword, vPort: string; var vRet: integer; var vMsg: string): Boolean; var vStr: TMemoryStream; vStr1: TMemoryStream; vStr2: TStringStream; vStrFileName: TStringList; vI: Integer; vS: string; vFlag: Boolean; LURI: TIdURI; begin try result := False; vRet := 0; vStr := TMemoryStream.Create; vStr1 := TMemoryStream.Create; vStr2 := TStringStream.Create(''); vStrFileName := TStringList.Create; IdAntiFreeze1.OnlyWhenIdle := False; Application.ProcessMessages; IdSSLIOHandlerSocket1.SSLOptions.CertFile := ExtractFilePath(Application.ExeName) 'IndyClientCrt.pem'; IdSSLIOHandlerSocket1.SSLOptions.KeyFile := ExtractFilePath(Application.ExeName) 'IndyClientKey.pem'; IdSSLIOHandlerSocket1.SSLOptions.RootCertFile := ExtractFilePath(Application.ExeName) 'IntelicomCACrt.pem'; // IdHTTP1.URL.URI := vHttps; // IdHTTP1.URL.Username := 'maintek\stars_chen'; // IdHTTP1.URL.Password := 'chen@19840429'; if IdHTTP1.Connected then IdHTTP1.Disconnect; // IdHTTP1.Get(vHttps, vStr2); IdHTTP1.DoRequest(hmGet, vHttps, nil, vStr2); GetFileName(vStrFileName, vStr2); Application.ProcessMessages; WriteMsg(1, 2, 'DownLoad File Start......'); for vI := 0 to vStrFileName.Count - 1 do begin if Pos('.', vStrFileName.Strings[vI]) = 0 then continue; if IdHTTP1.Connected then IdHTTP1.Disconnect; Application.ProcessMessages; try vFlag := False; vStr.Clear; // IdHTTP1.Get(vHttps vStrFileName.Strings[vI], vStr); IdHTTP1.DoRequest(hmGet, vHttps vStrFileName.Strings[vI], nil, vStr); except on e: exception do begin vFlag := True; WriteMsg(0, 2, 'DownLoad File ' vStrFileName.Strings[vI] ' Exception:' e.Message); end; end; Application.ProcessMessages; if not vFlag then begin vStr.SaveToFile(vFilePath vStrFileName.Strings[vI]); WriteMsg(1, 2, 'DownLoad File to ' vFilePath vStrFileName.Strings[vI] ' OK!'); end; end; WriteMsg(1, 2, 'DownLoad File Over......'); if IdHTTP1.Connected then IdHTTP1.Disconnect; IdHTTP1.Options('https://172.24.81.113/test/'); memo1.Lines.Add(IdHTTP1.Response.RawHeaders.Text); Application.ProcessMessages; vStr.Free; vStr1.Free; vStr2.Free; vStrFileName.Free; result := True; except on e: exception do begin result := False; vRet := 0; vStr.Free; vStr1.Free; vStr2.Free; vStrFileName.Free; vMsg := 'Exception:' e.Message; end; end; end; function THttps_Frm.GetFileName(vStrFileName: TStringList; vStr2: TStringStream): Boolean; var vStr, vStr1: string; vI, vJ: integer; begin try result := False; vStr := vStr2.DataString; vStr := Copy(vStr, pos('<body', LowerCase(vStr)), pos('</body', LowerCase(vStr))); while Pos('', UpperCase(vStr)) > 0 do begin Application.ProcessMessages; vStr1 := copy(vStr, 1, Pos('', UpperCase(vStr)) - 1); for vI := Length(vStr1) downto 1 do begin Application.ProcessMessages; if vStr1[vI] = '>' then begin vStrFileName.Add(copy(vStr1, vI 1, Length(vStr1))); break; end; end; vStr := copy(vStr, Length(vStr1) 4, Length(vStr)); end; result := True; except on e: exception do begin WriteMsg(0, 2, 'Call GetFileName Exception:' E.Message); result := False; end; end; end; |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== > 但如果要求輸入用戶名和密碼的我要怎麽寫呢? 這是網頁上的 ? (程式中用 Post 或 Get 傳出變數名稱, 和變數值) 還是瀏覽該目錄時候 IIS 要求的 ?? (IIS 改設定, 或程式中設定連線帳號密碼) 還是 ? 這是我在IIS裏面設定要求輸入用戶名和密碼才能訪問,所以在程式中在連接時也要有輸入用戶名和密碼才能正常的下載文件吧. 我現在就是不知道怎麽在程式中寫這代碼? 寫了好幾種都不行. |
stars_chen
一般會員 發表:14 回覆:35 積分:9 註冊:2006-10-29 發送簡訊給我 |
===================引 用 文 章=================== > 但如果要求輸入用戶名和密碼的我要怎麽寫呢? 這是網頁上的 ? (程式中用 Post 或 Get 傳出變數名稱, 和變數值) 還是瀏覽該目錄時候 IIS 要求的 ?? (IIS 改設定, 或程式中設定連線帳號密碼) 還是 ? 這是我在IIS裏面設定要求輸入用戶名和密碼才能訪問,所以在程式中在連接時也要有輸入用戶名和密碼才能正常的下載文件吧. 我現在就是不知道怎麽在程式中寫這代碼? 寫了好幾種都不行. |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |