各位大俠,請問誰有pb呼叫http的例子嗎?幫忙謝謝
uj5u.com熱心網友回復:
PostURL()功能執行HTTP Post,這樣PowerBuilder應用程式就可以通過CGI、NSAPI、ISAPI介面發送請求。
語法servicereference.PostURL ( urlname, urldata, headers, data )
引數
servicereference:Inet物件實體或參考
urlname:String型別,指定要發送請求的URL(統一資源定位器)
urldata:Blob型別,指定發送給urlname引數指定的URL的引數
headers:String型別,指定HTML首部。對Netscape瀏覽器來說,每個HTTP首部之后需要個換行符(~n),在所有首部之后再跟一個換行符(~n)
data:InternetResult實體變數,用于保存回傳的HTML
回傳值
Integer。函式執行成功時回傳1,發生錯誤時回傳下述值:
-1一般錯誤
-2指定的URL無效
-4不能連接到Internet上
-6Internet請求無效
用法
該函式的data引數要求是繼承了InternetResult物件的類用戶物件實體,在該用戶物件的定義中,需要定義覆寫函式InternetData(),用于處理Internet回傳的HTML資料。由于Internet以異步方式傳送資料,因此,data引數必須是某個實體變數或全域變數的參考(例如視窗級實體變數)。
示例 下面的代碼呼叫PostURL()。其中,Iinet_base是個Inet型別的實體變數;n_ir_msgbox是繼承了InternetResult物件的類用戶物件,iir_msgbox是該用戶物件的一個實體:
Blob lblb_args
String ls_headers
String ls_url
Long ll_length
ir_msgbox = CREATE n_ir_msgbox
ls_url = "http://coltrane.sybase.com/ "
ls_url += "cgi-bin/pbcgi60.exe/ "
ls_url += "myapp/n_cst_html/f_test? "
lblb_args = blob( " ")
ll_length = Len(lblb_args)
ls_headers = "Content-Length: " + String(ll_length) + "~n~n "
iinet_base.PostURL(ls_url, lblb_args, ls_headers, iir_msgbox)
uj5u.com熱心網友回復:
GetUrl也可以看一下PB的幫助
uj5u.com熱心網友回復:
PB中通過inet實作PostURL的方法global type demo_f_posturl from function_object
end type
forward prototypes
global function integer demo_f_posturl (string as_url, string as_args, ref string as_result)
end prototypes
global function integer demo_f_posturl (string as_url, string as_args, ref string as_result);Integer li_rc
String ls_header
Blob lblb_args
demo_n_inet lnv_inet
demo_n_internetresult lnv_data // internetresult的實體
If IsNull(as_url) Or as_url = '' Then Return -1
lnv_inet = Create demo_n_inet
lnv_data = Create demo_n_internetresult
lblb_args = Blob(as_args, EncodingUTF8!);
ls_header = "Content-Type:" + "application/x-www-form-urlencoded~n" + "Content-Length:" + String( len(lblb_args) ) + "~n~n";
//as_url = http://192.168.0.157:9009/test.do
li_rc = lnv_inet.PostURL(as_url, lblb_args, ls_header, lnv_data);
as_result = String(lnv_data.ResultData ,EncodingUTF8!) //ResultData為回傳的結果資料
Destroy lnv_data
Destroy lnv_inet
Return li_rc
end function
uj5u.com熱心網友回復:
PB做這個不是強項啊uj5u.com熱心網友回復:
一直沒搞清楚這兩句啥意思:lblb_args = blob( " ")
ll_length = Len(lblb_args)
uj5u.com熱心網友回復:
需要一個空的blob資料做為http的body
第二句,需要長度,寫到header里
uj5u.com熱心網友回復:
那這個blob資料作為body有實際意義嗎????還是說可以放東西進去,怎樣把它利用起來
uj5u.com熱心網友回復:
當然有意義 ,可以傳遞引數,如以下代碼Blob lblb_args
String ls_headers
String ls_url
String ls_args
long ll_length
integer li_rc
li_rc = GetContextService( "Internet", iinet_base )
IF li_rc = 1 THEN
ir = CREATE n_ir
ls_url = "http://localhost/Site/testurl.stm?"
ls_args = "user=MyName&pwd=MyPasswd"
lblb_args = Blob( ls_args )
ll_length = Len( lblb_args )
ls_header = "Content-Type: " + &
"application/x-www-form-urlencoded~n" + &
"Content-Length: " + String( ll_length ) + "~n~n"
li_rc = iinet.PostURL( ls_url, lblb_args, &
ls_header, ir )
END IF
uj5u.com熱心網友回復:
看這里ls_args = "user=MyName&pwd=MyPasswd"
可以把user和pwd引數傳遞到服務器上
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/54055.html
標籤:Web 應用
