2018年4月19日 星期四

asp 網頁轉交 (web page forwarding)

之前試過要在web server上寫一個asp,目的是做網頁轉交 (web page forwarding)。情況是這樣的:我想存取某一個網頁,但因為某些原因我不能直接存取(例如那個網頁是在一個內部伺服器內,我不能直接透過網絡存取那個伺服器),所以我要弄一個asp放在web server,而這個web server是可以存取內部伺服器的。
這個asp會把我的GET和POST request都轉交給目標網頁,再把目標網頁的內容轉交給我。
寫法如下:

1. 先設好CodePage

CodePage用來指定IIS用哪個代碼頁來解碼的,這裡我們用UTF-8(65001)
  1. Session.CodePage = 65001

2. 轉交網頁內容

先取得用家的POST request,還可以附帶你自己加上的ExtraPostData
  1. Dim strPostData
  2. strPostData = Request.form
  3. If strPostData <> "" Then strPostData = strPostData & "&"
  4. strPostData = strPostData & ExtraPostData
然後開啟XMLHTTP,把你的目標網頁(URLTarget)和GET request拼在一起,再連同POST request一起發送出去
  1. SET httpRequest = Server.createObject("MSXML2.XMLHTTP")
  2. With httpRequest
  3. .Open "POST", URLTarget & "?" & Request.QueryString , FALSE
  4. .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  5. .Send strPostData
  6. End With
最後再把取得的網頁內容寫出來,別忘了在Response header加上Character set,否則有些瀏覽器可能會用了錯的character set來解碼
  1. Response.charset = "UTF-8"
  2. Response.write(httpRequest.ResponseText)

不過這個asp只能轉交網頁,並不能轉交網頁附帶的資源(例如存放在內部伺服器的圖片和和連結)。

3. 錯誤處理

visual basic並沒有像C++之類的語言有exception handling機制,一般來說是先加入下面的代碼,這樣就算遇到錯誤不是馬上停止而是繼續下去:
  1. On Error Resume Next
之後每當你想檢查剛剛的代碼有沒有出錯時,可以檢查Err.Number:
  1. If Err.Number <> 0 Then
  2. Response.write Err.Description
  3. Err.Clear
  4. End If

沒有留言:

張貼留言