搜索
查看: 936|回复: 8

在模拟网页操作时,遇到put方式怎么做呢?谢谢

[复制链接]

7

主题

20

帖子

136

积分

一级会员

Rank: 2

积分
136
QQ
发表于 2017-10-7 21:21:22 | 显示全部楼层 |阅读模式
本帖最后由 jiumei 于 2017-10-7 21:27 编辑

        import inet.http;
        import inet.url;
        var http=inet.http()
        var url="这里是具体的网址";
        var jsonstr=/*{
                orderPickup={
                        channelid=40012;
                        seller_addressid=2479270;
                        pickup_time=1507694160;
                        consignment_no="";
                        remark="";
                        pickup_time_range=[
                        0=1507521360
                        1=1507607760
                        2=1507694160
                        3=1507780560
                        4=1507866960
                        5=1507953360
                        ];
                        exists=0;
                        editable=1;
                        selected_pickup_time_slot=[];
                        address=0;
                }
        }*/
        str = string.fromto(jsonstr,0,65001);
        var hml=http.post(url,str)
        var hmll=http.get(url,str)
        抓包时网页的请求方式是put,这里用get和post都不行,不知道怎么弄了,还请各位帮帮忙,谢谢了
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-7 21:47:45 | 显示全部楼层
你可以看一下http.get() http.port() 函数的源码差不多是这样:
http.get = function(url,headers,referer,accept,flags,openFlags){
   
return http.down(url, ,headers,referer,accept,"GET",flags,openFlags)
};
http.post =
function(url,postdata,headers,referer,accept,flags,openFlags){
   
return http.down(url,postdata,headers ,referer,accept,"POST",flags,openFlags)
};
所以他们都是调用http.down,除来GET,POST,当然也可以改为PUT这些。

不过一般调用PUT方法,可以使用 web.rest.client或者web.rest.jsonClient来代替inet.http,这些对象提供put函数。

回复

使用道具 举报

7

主题

20

帖子

136

积分

一级会员

Rank: 2

积分
136
QQ
 楼主| 发表于 2017-10-7 22:03:28 | 显示全部楼层
Jacen.He 发表于 2017-10-7 21:47
你可以看一下http.get() http.port() 函数的源码差不多是这样:
所以他们都是调用http.down,除来GET,POST ...

非常感谢版主,没想到回复这么快,再次感谢
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-7 22:39:25 | 显示全部楼层
补充一下,aardio的内部编码本来就是UTF8,所以你并不需要把字符串转换为UTF8
回复

使用道具 举报

7

主题

20

帖子

136

积分

一级会员

Rank: 2

积分
136
QQ
 楼主| 发表于 2017-10-7 22:53:44 | 显示全部楼层
本帖最后由 jiumei 于 2017-10-7 22:57 编辑
Jacen.He 发表于 2017-10-7 22:39
补充一下,aardio的内部编码本来就是UTF8,所以你并不需要把字符串转换为UTF8


感谢版主,还有个问题需要请教一下,非常感谢,问题如下:
我在put数据时,这个数据是json格式,而且json格式中含有数组,不知道该怎么写,“pickup_time_range=[” 这一行提示错误,错误在“[”   ;
下面的代码提交不成功,劳烦版主再指点指点,谢谢。
        import web.json;
        import web.rest.client;
        var a=web.rest.jsonClient()
        var url="网址"
        var getdata={
                   orderPickup={
                        channelid=40012;
                        seller_addressid=2479270;
                        pickup_time=1507866960;
                        consignment_no="";
                        pickup_time_range=[
                        0=1507521360
                        1=1507607760
                        2=1507694160
                        3=1507780560
                        4=1507866960
                        5=1507953360
                        ];
                        remark="";
                        exists=1;
                        editable=1;
                        selected_pickup_time_slot="";
                        address=2479270;
                }
        }
   var strJsonData = web.json.stringify(getdata,true)
    var strr=a.put(url,strJsonData)
    if(strr){
                win.msgbox("成功")
        }else{
                win.msgbox("失败")
        }
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-8 03:01:37 | 显示全部楼层
如果你的JSON是写在字符串里,按JSON的语法去写,
如果是类似上面那样写在aardio代码里,按aardio的语法写。

aardio的数组并不是这样写:
pickup_time_range=[
                        0=1507521360
                        1=1507607760
                        2=1507694160
                        3=1507780560
                        4=1507866960
                        5=1507953360
                        ];
首先数组应当放在{}里面,数组元素使用分号分隔,例如:
pickup_time_range={1507521360;1507607760;1507694160;1507780560;1507866960;1507953360}

你也可以这样写:
pickup_time_range={
    [1]=1507607760;
    [2]=1507694160;
};

你要区分对象、或数组在aardio中需要按aardio语法写,而JSON只是一种文本格式。

回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-8 03:04:03 | 显示全部楼层
  var strJsonData = web.json.stringify(getdata,true)
    var strr=a.put(url,strJsonData)

上面这样写是错的,你应该直接写:
a.put(url,getdata)
参数会自动转换为JSON格式的字符串
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-8 03:24:10 | 显示全部楼层
再写一个例子:
import console;
import web.rest.jsonClient;

var http = web.rest.jsonClient()

var data = {
    test = 123;
    test2 ={1;2;3}
}

var result = http.put("http://eu.httpbin.org/put",data)
console.dumpJson(result);

console.pause();
web.rest.jsonClient 要求提交,返回格式都是JSON
web.rest.jsonLiteClient 区别是只有提交时使用JSON

回复

使用道具 举报

7

主题

20

帖子

136

积分

一级会员

Rank: 2

积分
136
QQ
 楼主| 发表于 2017-10-10 13:40:01 | 显示全部楼层
Jacen.He 发表于 2017-10-8 03:24
再写一个例子:web.rest.jsonClient 要求提交,返回格式都是JSON
web.rest.jsonLiteClient 区别是只有提交 ...

太感谢了,版主不厌其烦的解决对你来说很简单的问题,真的是无言表达感动之情,再次感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-23 08:36 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表