pb取获网页:用PostURL+internetresult和XMLHTTP两种
原创
©著作权归作者所有:来自51CTO博客作者程序无悔的原创作品,请联系作者获取转载授权,否则将追究法律责任
第一种用自带的,本来应该无问题,但是今天遇到点问题,环境pb8,不知道怎么回事,读新浪首页可以40000多字节,但是读某个接口get才3000+字节,post才8000+字节。取不全。对长度的判断是在internetresult中的len(blob)
代码如下(是从网上找的调整后的):
//Blob lblb_args
//String ls_header
//String ls_url
//String ls_args
//long ll_length
//integer li_rc
long _pos//li_rc = GetContextService( "Internet", iinet_base )
//
//IF li_rc < 1 THEN return -1
//
uri//pb反编译
//pb混淆加密
//ls_url = "http://www.powerbuilder.ltd/indexcn.html"
//
parm
//ls_args =""
//lblb_args = Blob(ls_args)
//ll_length = Len(lblb_args)
//
//if _get_urlchk(url) = long(urlchk) then
// ls_header ="Content-Type: " + &
// "multipart/form-data~n" + &
// "Token: " + token +"~n" + &
// "Content-Length: " + String( ll_length ) + "~n~n"
//else
// ls_header ="Content-Type: " + &
// "multipart/form-data~n" + &
// "Token: ~n" + &
// "Content-Length: " + String( ll_length ) + "~n~n"
//end if
//
//string err[6] = {"-1 General error","-2 Invalid URL","","-4 Cannot connect to the Internet",&
// "-5 Unsupported secure (HTTPS) connection attempted",&
// "-6 Internet request failed"}
//int times =2
//do while times>0
// li_rc =iinet.PostURL(ls_url,lblb_args,ls_header,port,ir)
//
// if li_rc >=0 then exit
//
// times --
// if times <=0 then
// sle_orderinfo.text = "无法连接到主机取数据: ~n"+err[li_rc*(-1)]
// return -1
// end if
//
// //try agin
// sleep(2)
//loop
2. 改成微软控件
(因为:内部组件每次get只能取到3896字节,post取到8389字节)
oleobject ole_http
ole_http = create oleobject
ole_http.ConnectToNewObject( "Msxml2.XMLHTTP")
string ls_urlls_url = url+":"+string(port)+"/"+pathget
//GET
ole_http.Open("GET",ls_url,True)
ole_http.Send()Do While ole_http.readyState <> 4 //查询状态,延时
Yield()
Loop//获取返回、销毁对象
ir.is_data = ole_http.responseText()
destroy ole_http
**注意,这是调试通过的代码。我从网上找的几段类似代码都报错就是在ole_http.Open时,提示错误的方法(open)调试了一下午,睁大眼睛也没看出什么问题。我不清楚是不是ConnectToNewObject到不同的xmlhttp版本时,难道不能用open。。。备注有时间再去看看怎么回事。