web_custom_request函數發送get和post請求

(1)web_custom_request函數與其他錄製函數的區別
在LR中當使用HTML錄製方式時,錄製的腳本中主要由函數web_link()、web_submit_form()、web_url()、web_submit_data()組成,當使用HTTP錄製方式時,錄製的腳本中主要由函數web_url()、web_submit_data()組成,主要區別在於:

當使用HTML錄製時得到的函數更接近用戶的實際操作,腳本代碼相對較少且易於理解一些,但是函數之間有前後依賴關係,耦合度較高,其中web_link()用於模擬用戶點擊頁面上的鏈接;web_url()用於請求某個鏈接,Mode的值爲HTML,如果某個鏈接頁面上有大量的非html元素,例如:js、css、vbs、activeX、applets、各種格式的圖片等,則按照錄制時的設置來處理,默認爲也錄製到腳本步驟中,即web_url()函數的EXTRARES選項中,另外,也可以設置成不錄製或錄製到併發組web_concurrent_start(NULL)和web_concurrent_end(NULL)之間的web_url()函數中。

當使用HTTP錄製時得到的函數將包含所有請求內容,每一項需要請求的內容都會得到一個web_url()函數,Mode的值爲HTTP,因此腳本中會有大量的web_url()函數,且一般不帶EXTRARES選項,得到的腳本沒有很強的前後依賴關係,相對HTMP腳本的耦合度低一些,請求的內容也更全一些,一般只在很標準B/S模式下才會選用HTML,多數時候都可以選用HTTP的方式來錄製。另外在該錄製模式下,也可以設置選擇是否使用併發組函數web_concurrent_start()和web_concurrent_end(),如選擇則在很多非HTML的元素的請求前後都會加上併發組函數,還可以選擇是否只使用自定義函數web_custom_request(),如選擇則得到的腳本中所有的web_url()、web_submit_data()函數都將由函數web_custom_request()替代之。

本文的主角web_custom_request()終於上場了,web_custom_request()函數是一個可以用於自定義http請求的“萬能”函數,具有web_link()、web_url()、web_submit_data()函數的功能,一般當自定義請求時可以配合函數web_add_auto_header()、web_add_header()等系列函數來自定義其請求頭,web_custom_request()函數的Mode字段爲HTML時相當於使用HTML錄製方式的函數,Mode字段爲HTTP時相當於使用URL錄製方式的函數,Method字段可以爲GET和POST分別用於模擬http的get和post請求。

該函數web_custom_request()的具體參數說明可以參見本片文章結尾的附錄。

當使用web_custom_request()函數來發送http的get和post請求時,如果不使用web_add_header相關函數來自定義添加頭部,請求中是否帶有默認的頭部字段?通過使用抓包工具來查看發出的請求中的頭部字段

 腳本一:

web_custom_request("web_custom_request",
"URL=http://www.baidu.com",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Mode=HTTP",
"Body=123",
LAST);

腳本一實際發出的請求:

GET / HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: Keep-Alive
Host: www.baidu.com
Content-Length: 3

123

 

腳本二:

web_custom_request("web_custom_request",
"URL=http://www.baidu.com",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Referer=",
"Mode=HTTP",
"Body=abcd",
LAST);

腳本二實際發出的請求:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: Keep-Alive
Host: www.baidu.com
Content-Length: 4

abcd

由此可知,在使用web_custom_request()函數來模擬HTTP請求時,發出的請求中默認帶有部分的http請求頭部字段,具體字段如上,如需要修改默認的頭部字段或增加其他頭部字段就在web_custom_request()函數的前面使用web_add_header()函數來添加,如果要減少某個頭部字段或全部自動添加的頭部字段就在web_custom_request()函數的前面使用web_remove_auto_header()和web_revert_auto_header(),頭部字段所有請求中公共的一些頭部可以放在web_add_auto_header()函數中,配合web_add_header系列函數來完成自定義的業務腳本。
(2)web_custom_request函數參數介紹

URL-  請求地址 

Method – 請求方法  POST or GET.

EncType – 編碼類型,指定Content-Type,如"text/html","application/json"等,會重寫 web_add_[auto_]header中定義的Content-Type。

RecContentType – 響應頭編碼類型(Content–Type) e.g., text/html, application/x–javascript. 

Body – 請求體,不同的應用中,請求體分別通過Body、BodyBinary或者BodyUnicode參數來傳遞

Resource – 指示URL是否屬於資源。1 是;0 不是。設置了這個參數後,RecContentType參數被忽略。

"Resource=1":意味着當前操作與所在腳本的成功與否關係不大。在下載資源時如果發生錯誤,是當作警告而不是錯誤來處理的;URL是否被下載受“Run-Time Setting—Browser Emulation--Download non-HTML resources” 這個選項的影響。此操作的響應信息是不做爲HTML來解析的。

"Resource=0" :表明此URL是重要的,不受發送請求(RTS)的影響,在需要時也會解析它。

Mode – 錄製級別: HTML or HTTP. 

UserAgent – 用戶代理,它是一個HTTP頭的名字,用來標識應用程序,通常是瀏覽器,它呈現的是用戶和服務器的交互。

(3)web_custom_request函數發送get和post請求

Action()
{  
    //GET 請求
    web_custom_request("get_login",
                       "URL=http://10.1.102.75:8000/login?user=Milton&pwd=Loveyp",
                       "Method=GET",
                       "Resource=0",
                       "Mode=HTML",
                       "RecContentType=application/json",
                       LAST );
 
    //POST 請求提交form數據
    web_custom_request("post_form_login",
                       "URL=http://10.1.102.75:8000/login",
                       "Method=POST",
                       "Resource=0",
                       "Mode=HTML",
                       "Body=user=Milton&pwd=Loveyp",
                       LAST );
    //POST 請求提交json數據
    web_custom_request("post_json_login",
                       "URL=http://10.1.102.75:8000/json_login",
                       "Method=POST",
                       "Resource=0",
                       "Mode=HTML",
                       "EncType=application/json",
                       "Body={\"user\":\"Milton\",\"pwd\":\"Loveyp\"}",
                       LAST );
 
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章