从互联网上获取数据

时间:2011-03-09 10:18:10

标签: powerbuilder inet

我需要使用用户ID和密码从安全URL(https)获取数据。我该如何实现呢。

我可以使用以下命令

从普通URL访问数据
li_rc = linet_main.GetURL("http://www.webservicex.net/WeatherForecast.asmx?WSDL", luo_data)

提前致谢, 拉梅什。

1 个答案:

答案 0 :(得分:4)

我发现最简单的方法是通过OLE使用XMLHttp对象。这是PB 10.5中的一个导出函数,它使用它来点击加密的Google页面(因为他们的页面不接受它们,所以它在帖子部分上有404,但结果是有效的。)

$PBExportHeader$f_test_xmlhttps.srf
global type f_test_xmlhttps from function_object
end type

forward prototypes
global subroutine f_test_xmlhttps ()
end prototypes

global subroutine f_test_xmlhttps ();//First download and install the latest XMLHttp package
//(this link goes to the one listed in the connectToNewObject call
//http://www.microsoft.com/downloads/details.aspx?familyid=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&displaylang=en#filelist

//XMLHttp object method summary
//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmmscxmldommethods.asp

String ls_get_url, ls_post_url
String ls_post_variables, ls_response
String ls_response_text, ls_status_text
long   ll_status_code
OleObject loo_xmlhttp

//include parameters on the URL here for get parameters
ls_get_url = "https://encrypted.google.com/"

try
  //Create an instance of our COM object
  loo_xmlhttp = CREATE oleobject
  loo_xmlhttp.ConnectToNewObject("Msxml2.XMLHTTP.4.0")

  //First lets do a GET request 
  //All request parameters should be included in the URL
  loo_xmlhttp.open ("GET",ls_get_url, false)
  loo_xmlhttp.send()

  //Get our response
  ls_status_text = loo_xmlhttp.StatusText
  ll_status_code =  loo_xmlhttp.Status

  //Check HTTP Response code for errors
  //http://kbs.cs.tu-berlin.de/~jutta/ht/responses.html
  if ll_status_code >= 300 then
    MessageBox("HTTP GET Request Failed", ls_response_text)
  else
    //Get the response we received from the web server
    ls_response_text = loo_xmlhttp.ResponseText

    MessageBox("GET Request Succeeded", ls_response_text)
  end if

  //Lets do a POST now, We would pass a String
  //in the send() call that contains the post data in the 
  //format name1=value1&name2=value2&...
  ls_post_url = "https://encrypted.google.com/"
  ls_post_variables = ""

  loo_xmlhttp.open ("POST",ls_post_url, false)
  loo_xmlhttp.send(ls_post_variables)

  //Get our response
  ls_status_text = loo_xmlhttp.StatusText
  ll_status_code =  loo_xmlhttp.Status

  //Check HTTP Response code for errors
  //http://kbs.cs.tu-berlin.de/~jutta/ht/responses.html
  if ll_status_code >= 300 then
    MessageBox("HTTP POST Request Failed", ls_response_text)
  else
    //Get the response we received from the web server
    ls_response_text = loo_xmlhttp.ResponseText

    MessageBox("POST Request Succeeded", ls_response_text)
  end if

  //Done so cleanup
  loo_xmlhttp.DisconnectObject()

catch (RuntimeError rte)

  MessageBox("Error", "RuntimeError - " + rte.getMessage())

end try

end subroutine

将其保存为f_test_xmlhttps.srf并导入到PowerBuilder中的pbl中。这也适用于HTTP。