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)
Session.CodePage = 65001

2. 轉交網頁內容

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

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

3. 錯誤處理

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

沒有留言:

張貼留言