Aardio - post、put提交数据简例

admin2022-03-04  4.3K+

本文重点总结:

1、协议头 Content-Length 这一项强烈建议删除。因为提交的数据长度不符,会导致处理失败。(特殊需求的可以自行计算正确值。)

2、json数组,强烈建议用 web.json.stringifyArray() 函数转为文本。因为文本格式不对,会导致处理失败。(特殊需求的可以自己构造为符合要求的文本格式。)

一、post登录示例。

1、根据经验,使用账号密码登录,一般都使用post方式。

2、根据经验,post提交数据的重点,一般是解决以下三个方面的问题:

1、确定目标网址url

2、确定提交的数据格式及内容postdata,如果密码进行了加密,则找出算法。

3、确定来源网址referer

3、解决以上三个问题的方法很多,我推荐对登录页面的提交操作进行数据拦截,以上数据就一目了然。

特别注意:

1、拦截的数据,一般包含headers和data。格式如下:

POST https://www.abc.com/login.jsp HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Referer: https://www.abc.com/login.jsp
Content-Length: 33
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Connection: keep-alive
Accept: */*
Origin: https://www.abc.com
Cookie: terminal=fe45da2b-d872-4fe4-8d45-f2531d1dd045
user=aaaa&pass=123456

2、里面包含了很多信息。一般主要用到以下三项:

1、URL(必须):https://www.abc.com/login.jsp
2、Referer(可选): https://www.abc.com/login.jsp
3、postData(必须):user=aaaa&pass=123456
4、根据数据提交及返回格式的不同,采用不同的aardio库进行提交。

5、简单示例:

    //引用网络库
    import web.rest.jsonLiteClient
    var w = web.rest.jsonLiteClient()
    
    //指定来源地址,可选。部分网站会检查来源地址。
       w.referer = "https://www.abc.com/login.jsp";
 
    //提交数据
    var  t = w.post("https://www.abc.com/login.jsp","user=abc&pass=123456");
 
    //检查登录结果
    if t.msg!="success" return winform.edit2.print(tostring(time.now())  " 登录失败!"); 
    winform.edit2.print(tostring(time.now())  " 登录成功!")


二、put数据操作:

1、原理同上。

2、简易代码如下:

    // 构造协议头
    w.addHeaders = `Referer: https://www.abc.com/member/price/PriceList.jsp
    Origin: https://www.abc.com
    Accept-Language: zh-CN,zh;q=0.9
    Connection: keep-alive
    Accept: application/json, text/javascript, */*; q=0.01
    Sec-Fetch-Mode: cors
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)
    Content-Type: application/json
    Sec-Fetch-Site: same-site
    Sec-Fetch-Dest: empty
    Accept-Encoding: gzip, deflate, br`
 
    // 构造json数组数据
    var putdata = web.json.stringifyArray(jsonRrecords)
 
    // put提交数据
    t = w.put("https://api.abc.com/portal/chinaPrice/updateAll",putdata)
 
    // 检查提交结果
    if t.msg!="success" return winform.edit2.print(tostring(time.now())  " 保存失败!"); 
    winform.edit2.print(tostring(time.now())  " 保存成功!")


3、特别注意:

1、因为提交数据需要部分协议头,为了操作方便,或满足个别网站的特殊要求,可将拦截的headers内容及格式进行部分修改后,一同进行提交。

2、重点需要注意的是:Content-Length 这一项,强烈建议直接删除。要么就自己计算正确的数据长度,这比较麻烦。否则可能会提交失败。

3、cookie项酌情处理。如果是登录,一般不会有cookie。如果是登录后的其他操作,可酌情处理。

4、json数组,可以用 web.json.stringifyArray() 函数进行处理,将 json数组数据 转为文本。或者自己构造为符合要求的文本格式,但比较麻烦。
————————————————
版权声明:本文为CSDN博主「卢光庆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sdlgq/article/details/123244739

转载请注明原文地址: http://www.aardio.net/read-299.html
最新回复(0)
aardio问答
aardio编程语言