<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jsx</title>
<style>
.title{
background-color: orange:
width: 200px;
}
</style><!--定義個樣式,也可以寫在CSS文件里,引入進來-->
</head>
<body>
<div id="test"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
</body>
<script type="text/babel">
const myid="lOVE you"
const mydata="hellO jsx"
const VDOM=( // <!--h2標簽引入樣式,用className,span標簽引入內聯樣式的時候,不是用雙引號,而是雙花括號,-->
<div>
<h2 className="title" id={myid.toLowerCase()}>
<span style={{color:'red',fontSize:'29px'}}>{mydata.toLowerCase()}</span>
</h2>)// <!--標簽中混入JS表達式時要用花括號{},如這里mydata取值 -->
//jsx中只能有一個根標簽,比如這里的h2,可以在h2的外面包一層div,就可以寫兩個h2
<h2 className="title" id={myid.toUpperCase()}>
<span style={{color:'red',fontSize:'29px'}}>{mydata.toLowerCase()}</span>
</h2>)
//標簽首字母若是小寫字母,則將該標簽轉為html中同名元素,若html中無該標簽對應的同名元素,則報錯
//標簽首字母若是大寫字母,react就去渲染對應的組件,若組件沒有定義,則報錯
</div>
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
</html>
<script type="text/babel">
const data=['A','B','C']
const VDOM=(
<div> //js表達式會產生一個值。js語句(代碼),有if,for,switch判斷,
<h1>jsx框架</h1>
<ul>
{
data.map((item,index)=>{
return <li key={index}>{item}</li>
}) //item拿到data里面對應的值,map遍歷的第二個值是索引值,
}
</ul>
</div>
)
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
對應的網頁如下:
模塊是向外提供特定功能的js程序,一般就是一個js文件。
組件比模塊更高一級,比如實現一個網頁的頭部的html,字體,css,js,圖像這些元素組合在一起,就形成了頭部這個組件。
函數式組件:
<script type="text/babel">
function MyComponent(){
return <h2>show the function component</h2>
}
ReactDOM.render(<MyComponent/>,document.getElementById('test'))
//<MyComponent/>要寫上標簽,函數定義首字母需要大寫
</script>
執行了ReactDOM.render(<MyComponent/>。。之后,React解析組件標簽,找到MyComponent組件,發現組件是使用函數定義的,隨后調用該函數,將返回的虛擬DOM轉為真是DOM,隨后呈現在頁面中。
類式組件:
HTML 頁面中顯示 XML 數據
在下面的實例中,我們打開一個 XML 文件("cd_catalog.xml"),然后遍歷每個 CD 元素,并顯示HTML 表格中的 ARTIST 元素和 TITLE 元素的值:
實例
<html>
<body>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
{
document.write("<tr><td>");
document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
document.write("</td><td>");
document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
document.write("</td></tr>");
}
document.write("</table>");
</script>
</body>
</html>
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
先來看一段代碼,啟動一個靜態的http服務
import CBHttp.code
function main(parm)
{
var httpServer=new HttpServer();
httpServer.startServer();
while(1) //主線程不能退出
{
Sleep(1000);
}
}
服務啟動好了,假設我們的項目根目錄是E:\cbrotherwork\httpserver,那么我們的服務根路徑就默認是E:\cbrotherwork\httpserver\webroot
我們新建txt文件E:\cbrotherwork\httpserver\webroot1.txt,在文本里輸入內容Hello HttpServer!。
然后我們打開本機瀏覽器輸入:http://127.0.0.1:8000/111.txt,你發現你在網頁上訪問到了111.txt
主流的文件格式都支持下載
靜態下載的過程中,有時需要控制可下載的文件格式,那么就要手動調配MIME
import CBHttp.code
function main(parm)
{
var httpServer=new HttpServer();
httpServer.addMIME("mystyle","text/html"); //添加后綴名為.mystyle,mime為text/html
httpServer.addMIME("c"); //添加后綴名為.c,mime類型讓系統自動識別
httpServer.removeMIME("gif"); //刪除gif
var mimiemap=httpServer.getMIME(); //獲取目前支持的mime類型
mimiemap.begin();
do
{
print mimiemap.getKey() + ":" + mimiemap.getValue();
}
while(mimiemap.next());
httpServer.startServer();
while(1)
{
Sleep(1000);
}
}
運行結果:
rar:application/octet-stream
bmp:image/bmp
xml:application/xml
html:text/html
c:text/plain
js:application/x-javascript
txt:text/plain
ico:image/x-icon
zip:application/zip
jpg:image/jpeg
mystyle:text/html
7z:application/octet-stream
json:application/json
swf:application/x-shockwave-flash
css:text/css
png:image/png
我們通常需要在用戶調用一個接口時通過一些條件來返回不同的內容,下面我們再通過一段代碼看一下
import CBHttp.code
class HelloAction
{
function DoAction(request,respon) //這個函數寫法是固定的,request表示客戶端請求信息,respon是回復給客戶機的信息
{
var myTime=new Time();
respon.write("now time is:" + myTime.strftime("%Y/%m/%d %H:%M:%S"));
respon.flush();
}
}
function main(parm)
{
var httpServer=new HttpServer();
httpServer.addAction("hello.cb",new HelloAction()); //我們注冊接口hello.cb,響應類是HelloAction
httpServer.startServer();
while(1) //主線程不能退出
{
Sleep(1000);
}
}
然后我們瀏覽器輸入:http://127.0.0.1:8000/hello.cb,每次訪問返回的都是當前時間。
接口名字可以是任意字符串,官方建議用統一的后綴,方便跟其他web服務器協作。
函數 | 描述 | 用法 |
addAction(name,actobj) | 添加http響應接口,name為接口名字,actobj為響應的Action對象 | httpServer.addAction("hello.cb",actobj) |
startServer(port,listen_ip) | 啟動服務 | httpServer.startServer(port,listen_ip) |
stopServer() | 停止服務 | httpServer.stopServer() |
setRoot(path) | 設置服務器跟目錄,path: 根目錄絕對路徑 | httpServer.setRoot(path) |
setThreadCount(cnt) | 設置響應線程數量,默認10個 | httpServer.setThreadCount(50) |
setNormalAction(actName) | 設置默認響應接口 | httpServer.setNormalAction("hello.cb") |
set404Action(actName) | 設置錯誤響應接口,不設置CBrother有默認頁面 | httpServer.set404Action("404.cb") |
setOutTime(t) | 設置請求超時時間,默認10秒,單位為秒 | httpServer.setOutTime(3) |
setMaxReqDataLen(len) | 設置客戶機發送的最大請求數據長度,默認500K,參數單位為(字節) | httpServer.setMaxReqDataLen(1024 * 1024) |
openLog() | 打開日志,在webroot平級建立log目錄默認關閉,建議打開 | httpServer.openLog() |
closeFileService() | 關閉文件下載服務錄 | httpServer.closeFileService() |
setHttpsCertFile(CRT_PATH,KEY_PATH) | 設置https證書 | httpServer.setHttpsCertFile("e:/a.crt","e:/a.key") |
setWebSocketModule(name,wsmodule) | 設置websocket模塊來支持websocket協議 | httpServer.setWebSocketModule(name,wsmodule) |
getMIME() | 獲取服務目前支持的mime格式,返回一個map對象,key為擴展,value為類型 | var map=httpServer.getMIME() |
addMIME(ext,type) | 添加mime類型,ext: 擴展名 | httpServer.addMIME("txt"); |
removeMIME(ext) | 移除mime類型,ext為擴展名 | httpServer.removeMIME("txt"); |
除了stopServer,其他接口都應該在startServer之前調用。
響應類必須要有function DoAction(request,respon)函數,如果沒有會注冊失敗。
這個方法會被多線程調用,如果要訪問公共資源需要加鎖。
函數 | 描述 | 用法 |
getUrl() | 獲取請求的路徑 | var url=request.getUrl() |
getProperty(name) | 獲取HTTP頭里的參數 | var v=request.getProperty("Content-Type") |
getAllProperty() | 獲取HTTP頭里的所有的參數,返回一個Map對象 | var proMap=request.getAllProperty() |
getParm(name) | 獲取請求鏈接?后面的參數,127.0.0.1?k=v&k1=1 | var v=request.getParm("k") |
getParmInt(name) | 獲取請求鏈接?后面的參數,強轉整形 | var v=request.getParmInt("k1") |
getAllParm() | 獲取請求鏈接?后面的所有參數,返回一個Map對象 | var parmMap=request.getAllParm() |
getData() | 獲取請求post的數據 | var data=request.getData() |
getRemoteIP() | 獲取客戶機IP | var ip=request.getRemoteIP() |
getMethod() | 獲取請求類型,"GET"或"POST" | var method=request.getMethod() |
getCookieCount() | 獲取cookie數量 | var cnt=request.getCookieCount() |
getCookie(index) | 根據索引獲取cookie,返回cookie對象 | var cookie=request.getCookie(0) |
getCookie(cookieName) | 根據名字獲取cookie,如果有重名的cookie返回第一個 | var cookie=request.getCookie("userName") |
getFormData() | 獲取form表單數據,當客戶端以form表單格式提交才返回FormData對象,否則返回null | var formdata=request.getFormData() |
isKeepAlive() | 客戶端請求是否為保持連接狀態,true為保持連接,false為立即關閉 | var isKeep=request.isKeepAlive() |
isHttps() | 客戶端請求是否為https,true為https,false為http | var isKeep=request.isHttps() |
函數 | 描述 | 用法 |
addProperty(key,value) | 添加http頭數據,必須為字符串 | respon.addProperty("Access-Control-Allow-Origin","*") |
addCookie(cookie) | 添加cookie | respon.addCookie(new Cookie("aaa","bbb")) |
setStatus(status) | 設置返回http狀態 | respon.setStatus(200) |
write(data) | 寫入要返回數據 | respon.write("hello") |
flush() | 發送數據 | respon.flush() |
在日常開發中,服務器需要通過cookie來判別客戶機身份,CBrother提供了Cookie類來描述http頭中的Set-Cookie與Cookie字段
函數 | 描述 | 用法 |
setName(name) | 設置cookie的名稱 | myCookie.setName("aaa") |
setValue(v,pwd) | 設置cookie的字段,pwd不傳為明文,傳入密碼會增加一個簽名 | myCookie.setValue("bbb") |
getName() | 獲取cookie的名稱 | var name=myCookie.getName() |
getValue(pwd) | 獲取cookie的字段,pwd不傳返回原文,傳入密碼會檢查簽名 | var cookie=myCookie.getValue() |
setPath(path) | 設置cookie的有效路徑,不設置默認為'/' | myCookie.setPath("/aa/cc/") |
setDomain(domain) | 設置cookie的域,默認為空 | myCookie.setDomain("cbrother.net") |
setExpires(timeSeconds) | 設置cookie有效時間,單位為秒,設置為0表示刪除cookie,默認瀏覽器關閉失效 | myCookie.setExpires(300) |
setHttpOnly(boolValue) | cookie的HttpOnly標簽,默認false | myCookie.setHttpOnly(true) |
getPath() | 獲取cookie的有效路徑 | var path=myCookie.getPath() |
getDomain() | 獲取cookie的域 | var domain=myCookie.getDomain() |
getExpires() | 獲取cookie有效時間 | var t=myCookie.getExpires() |
getHttpOnly() | 獲取cookie的HttpOnly標簽 | var httponly=myCookie.getHttpOnly() |
其中帶密碼的setValue方法會用密碼和原始明文算一個md5值作為cookie簽名,這樣保證了cookie不可被偽造,一般可以用于登陸狀態驗證。當然,在一些安全性要求比較高的場景,開發者也可以自己實現安全級別更高的cookie加密驗證方式。
通過一個段代碼來學習一下Cookie的用法:
class CookieAction
{
function DoAction(request,respon)
{
var cookieCnt=request.getCookieCount(); //獲取客戶機Cookie數量
if(cookieCnt > 0)
{
for(var i=0 ; i < cookieCnt ; i++) //遍歷的方式可以獲取所有的Cookie,包括名字相同的Cookie
{
//客戶機已經有cookie
var cookie=request.getCookie(i);
if(cookie.getName()=="pwdCookie")
{
print cookie.getValue();
print cookie.getValue("pwd222"); //帶密碼的cookie
}
else
{
print cookie.getValue(); //明文cookie
}
}
var pwdCookie request.getCookie("pwdCookie"); //根據名字獲取Cookie,如果有同名Cookie則只返回第一個
print pwdCookie.getValue("pwd222");
}
else
{
//客戶機沒有cookie
var cookie=new Cookie("normalCookie","3333");
respon.addCookie(cookie); //添加明文cookie
cookie=new Cookie();
cookie.setName("pwdCookie");
cookie.setValue("3333","pwd222");
respon.addCookie(cookie); //添加帶密碼的cookie
}
var myTime=new Time();
respon.write("now time is:" + myTime.strftime("%Y/%m/%d %H:%M:%S"));
respon.flush();
}
}
CBrother提供了FormData類來描述form表單數據
函數 | 描述 | 用法 |
getType() | 獲取表單enctype類型,FORM_WWW_URLENCODED表示application/x-www-form-urlencoded,FORM_MULTI_PART表示multipart/form-data。在lib/htppdef里定義 | var t=form.getType() |
getTextCnt() | 獲取type不為"file"的input數量 | var cnt=form.getTextCnt() |
getText(index) | 根據坐標獲取input的value,type為file獲取不到 | var value=form.getText(0) |
getText(name) | 根據name獲取input的value,type為file獲取不到 | var value=form.getText("txt1") |
getTextName(index) | 根據坐標獲取input的name,type為file獲取不到 | var name=form.getTextName(0) |
getMultiPartCnt() | 當form的enctype為FORM_MULTI_PART時候,獲取input數量 | var cnt=form.getMultiPartCnt() |
getMultiPart(index) | 根據坐標獲取input數據,返回Multipart對象 | var data=form.getMultiPart(0) |
getMultiPart(name) | 根據name獲取input數據,返回Multipart對象 | var data=form.getMultiPart("file") |
addText(name,str) | 添加一個文本類型的input數據,name為名稱,str為內容.根HttpClientRequest向其他服務器發起請求的時候使用 | form.addText("111","111") |
addFile(name,filename,data,mime) | 添加一個文件類型的input數據,name為名稱,filename為文件名,data為文件內容string或ByteArray對象,mime為文件mime類型,不傳值會自動識別 | form.addFile("file1","222.txt","222") |
比如web前端提交的form表單結構如下:
<form method="post" action="form.cb" >
<input type="text" name="txt1">
<input type="text" name="txt2">
<input type="password" name="userpass"
<input type="radio" name="sex" value="man" checked>man
<input type="radio" name="sex" value="woman">woman
<input type="file" name="file" value="hiddenvalue" multiple="multiple"/>
<input type="submit" value="提交(提交按鈕)">
</form>
網頁展示效果如下:
因為這個表單沒有指定enctype,所以Content-Type為application/x-www-form-urlencoded,我們日常使用到的大部分表單都是這種格式。當前端post提交后服務器使用如下方式獲取表單數據
class FormAction
{
function DoAction(request,respon)
{
print request.getData(); //打印發送的數據
print "**********************分割線*******************************";
var formdata=request.getFormData();
if(formdata==null)
{
return; //只有Content-Type為application/x-www-form-urlencoded或者multipart/form-data時候才會返回FormData對象,否則返回null
}
var type=formdata.getType();
if(type==FORM_WWW_URLENCODED) //Content-Type為application/x-www-form-urlencoded類型的表單
{
var textCnt=formdata.getTextCnt();
for(var i=0 ; i < textCnt ; i++)
{
print formdata.getTextName(i) + ":" + formdata.getText(i);
}
}
}
}
服務器輸出結果:
txt1=111&txt2=222&userpass=333&sex=man&file=111.txt
**********************分割線*******************************
txt1:111
txt2:222
userpass:333
sex:man
file:111.txt
這里需要學習一下form添加enctype=multipart/form-data時提交的報文格式
Multipart類來描述form表單在multipart/form-data數據類型下的一個input數據,這個類型的表單一般用在上傳文件
函數 | 描述 | 用法 |
getParm(name) | 獲取Multipart段落內的參數 | var parm=mulpart.getParm("name") |
getData(isByte) | 獲取Multipart的數據,isByte不傳值,默認返回字符串,傳true返回ByteArray對象 | var data=mulpart.getData() |
getDataLen() | 獲取數據長度 | var len=mulpart.getDataLen() |
isFile() | 如果是文件類型,返回true | var isfile=mulpart.isFile() |
getFileCount() | 獲取這個input上傳了幾個文件 | var cnt=mulpart.getFileCount() |
getFile(index) | 獲取文件對應數據,返回一個Multipart對象 | var filedata=mulpart.getFile(0) |
比如web前端提交的form表單結構如下:(只是添加了一個enctype="multipart/form-data")
<form method="post" action="form.cb" enctype="multipart/form-data">
<input type="text" name="txt1">
<input type="text" name="txt2">
<input type="password" name="userpass"
<input type="radio" name="sex" value="man" checked>man
<input type="radio" name="sex" value="woman">woman
<input type="file" name="file" value="hiddenvalue" multiple="multiple"/>
<input type="submit" value="提交(提交按鈕)">
</form>
網頁展示效果沒有變化如下:
添加了enctype,Content-Type變成multipart/form-data,服務器使用如下方式獲取表單數據
class FormAction
{
function DoAction(request,respon)
{
print request.getData(); //打印發送的數據
print "**********************分割線*******************************";
var formdata=request.getFormData();
if(formdata==null)
{
return; //只有Content-Type為application/x-www-form-urlencoded或者multipart/form-data時候才會返回FormData對象,否則返回null
}
var type=formdata.getType();
if(type==FORM_MULTI_PART) //Content-Type為multipart/form-data類型的表單
{
var formcnt=formdata.getMultiPartCnt();
for(var i=0 ; i < formcnt ; i++)
{
var muldata=formdata.getMultiPart(i);
if(muldata.isFile()) //如果是上傳的文件
{
for(var j=0 ; j < muldata.getFileCount() ; j++)
{
//上傳的文件可以在這里通過File對象把數據保存到文件里,CBrother目錄下sample/http/httpserver_form.cb里面有例子,這里只是把數據打印出來
var filedata=muldata.getFile(j);
print filedata.getParm("name") + " " + filedata.getParm("filename") + ": size=" + filedata.getDataLen() + " value=" + filedata.getData();
}
}
else
{
print muldata.getParm("name") + ":" + muldata.getData();
}
}
}
}
}
服務器運行結果如下:
------WebKitFormBoundaryw7KfcBx8f23zh8d4
Content-Disposition: form-data; name="txt1"
111
------WebKitFormBoundaryw7KfcBx8f23zh8d4
Content-Disposition: form-data; name="txt2"
222
------WebKitFormBoundaryw7KfcBx8f23zh8d4
Content-Disposition: form-data; name="userpass"
------WebKitFormBoundaryw7KfcBx8f23zh8d4
Content-Disposition: form-data; name="sex"
man
------WebKitFormBoundaryw7KfcBx8f23zh8d4
Content-Disposition: form-data; name="file"; filename="111.txt"
Content-Type: text/plain
i'am 111.txt file value!
------WebKitFormBoundaryw7KfcBx8f23zh8d4--
**********************分割線*******************************
txt1:111
txt2:222
userpass:
sex:man
file 111.txt: size=24 value=i'am 111.txt file value!
在開發過程中,我們經常會遇到與第三方服務器通信,這時候就需要主動請求第三方服務器接口,CBrother提供了HttpClientRequest來主動訪問別人提供的http和https接口
var myReq=new HttpClientRequest();
函數 | 描述 | 用法 |
setMethod(method) | 設置請求方式,"GET"或者"POST",類型字符串 | myReq.setMethod("POST") |
setUrl(url) | 設置請求地址,參數地址全路徑 | myReq.setUrl("http://127.0.0.1/hello.cb") |
addProperty(key,value) | 添加http頭,必須都為字符串 | myReq.addProperty("HOST","127.0.0.1") |
getProperty(key) | 獲取HTTP頭里的參數,返回值為字符串 | var v=myReq.getProperty("Content-Type") |
getAllProperty() | 獲取HTTP頭里的所有的參數,返回一個Map對象 | var proMap=myReq.getAllProperty() |
addParm(key,value) | 在鏈接上添加參數,必須都為字符串。會在鏈接地址后面追加?k1=v1&k2=v2 | myReq.addParm("11","121") |
getParm(key) | 獲取已經添加的參數 | var v=myReq.getParm("k") |
getAllParm() | 獲取已經添加的參數,返回一個Map對象 | var parmMap=myReq.getAllParm() |
addData(data) | 添加要提交的數據,data為要提交的數據,必須都為字符串 | myReq.addData("11221122") |
flush() | 發起請求,返回HttpClientResponse對象 | var response=myReq.flush() |
setOutTime(seconds) | 設置超時時間,單位為秒 | myReq.setOutTime(5) |
setKeepAlive(isKeep) | 設置是否保持與服務器連接,不設置默認false不保持 | myReq.setKeepAlive(true) |
reset(clearHead=true) | 還原成一個新的請求對象,僅保留網絡連接。開啟keepalive以此來復用網絡,clearHead傳值為false則不清理已經添加的http頭 | myReq.reset() |
close() | 如果開啟了keepalive,則主動關閉與服務器鏈接,不開啟沒意義 | myReq.close() |
addFormData(enctype) | 本次請求添加form表單數據 | var formdata=myReq.addFormData(FORM_WWW_URLENCODED) |
addCookie(cookie) | 添加一個cookie | myReq.addCookie(new Cookie("aaa","bbb")) |
getCookieCount() | 獲取添加cookie數量 | var cnt=myReq.getCookieCount() |
getCookie(index) | 根據索引獲取cookie | var cookie=myReq.getCookie(index) |
getCookie(cookieName) | 根據名字獲取cookie | var cookie=myReq.getCookie("cookieName") |
setProxy(proxyType,ip,port,acc,pwd) | 設置代理,proxyType為"http","https","socket5"中的一種。ip,port為代理服務器IP,如果服務器需要驗證用戶名,最后兩個參數需要寫帳號密碼 | myReq.setProxy("socket5","111.111.111.111",4646) |
var myReq=new HttpClientRequest();
myReq.setMethod("GET");
myReq.setUrl("https://www.baidu.com");
var myResponse=myReq.flush();
函數 | 描述 | 用法 |
getStatus() | 獲取狀態碼 | var staus=myResponse.getStatus() |
getProperty(name) | 獲取HTTP頭里的參數,返回值為字符串 | var v=myResponse.getProperty("Content-Type") |
getAllProperty() | 獲取HTTP頭里的所有的參數,返回一個Map對象 | var proMap=myResponse.getAllProperty() |
getData() | 獲取返回的數據 | var data=myResponse.getData() |
getCookieCount() | 獲取cookie數量 | var cnt=myResponse.getCookieCount() |
getCookie(index) | 根據索引獲取cookie對象 | var cookie=myResponse.getCookie(0) |
getCookie(cookieName) | 根據名字獲取cookie對象 | var cookie=myResponse.getCookie("cookieName") |
例子:
import CBHttp.code
function main(parm)
{
var myReq=new HttpClientRequest();
myReq.setMethod("GET");
myReq.setUrl("https://www.baidu.com");
var myRes=myReq.flush();
print myRes.getStatus();
print myRes.getData();
}
結果:
200
<html>
<head>
<script>
location.replace(location.href.replace("https://","http://"));
</script>
</head>
<body>
<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>
import CBHttp.code
import lib/httpdef
function main(parm)
{
var myReq=new HttpClientRequest();
myReq.setMethod(HTTP_GET);
myReq.setUrl("http://www.cbrother.net");
myReq.setKeepAlive(true); //開啟keepalive,如果沒有這一句默認是請求完畢后自動關閉連接
var myRes=myReq.flush();
print myRes.getStatus();
print myRes.getData();
myReq.reset(); //重置請求對象,僅保留網絡連接,如果因為超時連接被服務器主動關閉,那么第二次請求會重新創建連接
myReq.setMethod(HTTP_GET);
myReq.setUrl("http://www.cbrother.net/doc.html");
var myRes=myReq.flush(); //第二次請求沒有開啟keepalive,所以這句執行完后連接就會關閉了
print myRes.getStatus();
print myRes.getData();
}
function main(parm)
{
var myReq=new HttpClientRequest();
myReq.setMethod("GET");
myReq.setUrl("https://www.baidu.com");
myReq.addCookie(new Cookie("aaa","bbb")); //本次請求添加cookie
var myRes=myReq.flush();
var cookieCnt=myRes.getCookieCount(); //服務器返回的cookie信息
for(var i=0 ; i < cookieCnt ; i++)
{
var cookie=request.getCookie(i);
print cookie.getName();
print cookie.getValue();
}
}
import lib/httpdef
function main(parm)
{
var clientReq=new HttpClientRequest();
clientReq.setMethod(HTTP_POST);
clientReq.setUrl("http://127.0.0.1:8003/form.cb");
var formdata=clientReq.addFormData(FORM_MULTI_PART); //也可以用FORM_WWW_URLENCODED,FORM_WWW_URLENCODED類型不支持上傳文件
formdata.addText("111","111");
formdata.addText("222","222");
formdata.addFile("file","111.txt","222");
formdata.addFile("file","222.txt","34567");
clientReq.flush();
}
如果需要在一臺服務上同時布置多個網站,則需要在調用HttpServer下面幾個接口時第二個參數傳入網站的域名即可
函數 | 描述 | 用法 |
setRoot(path,domain) | 設置域名跟目錄 | httpServer.setRoot(path,"www.cbrother.net") |
setNormalAction(actName,domain) | 設置域名默認響應接口 | httpServer.setNormalAction("hello.cb","www.cbrother.net") |
set404Action(actName,domain) | 設置域名錯誤界面接口,不設置有默認頁面 | httpServer.set404Action("404.cb","www.cbrother.net") |
setHttpsCertFile(CRT_PATH,KEY_PATH,domain) | 設置https證書,如果設置了證書,該域名才可支持https協議 |
*請認真填寫需求信息,我們會在24小時內與您取得聯系。