搜索
查看: 1784|回复: 7

如何在wb.click()的时候修改header?

[复制链接]

1

主题

4

帖子

38

积分

新手入门

Rank: 1

积分
38
发表于 2013-1-10 16:58:22 | 显示全部楼层 |阅读模式
有个需求,就是在执行wb.click()的时候,修改一下web.form的header
看到addHeader只在post 和 go 的时候使用,请问如果用click,点某个链接,怎么才能修改header呢?
回复

使用道具 举报

4

主题

877

帖子

4724

积分

荣誉会员

Rank: 8Rank: 8

积分
4724
发表于 2013-1-10 19:05:02 | 显示全部楼层

这个只有用API钩子了

这个只有用API钩子了
回复

使用道具 举报

1

主题

4

帖子

38

积分

新手入门

Rank: 1

积分
38
 楼主| 发表于 2013-1-11 10:17:19 | 显示全部楼层

[quote][size=2][color=#999999]不争 发表于 2013-1-10 19:05[/color] [url=forum.php?mod=

不争 发表于 2013-1-10 19:05
这个只有用API钩子了

请详细说说api钩子应该怎么用,谢谢!!
回复

使用道具 举报

1

主题

4

帖子

38

积分

新手入门

Rank: 1

积分
38
 楼主| 发表于 2013-1-11 12:57:21 | 显示全部楼层

搞定了,有个 web.form.util.setUserAgent(wb,tempHeader); 可以直接改指定的userAgent 可是还有个问题

搞定了,有个
web.form.util.setUserAgent(wb,tempHeader);
可以直接改指定的userAgent

可是还有个问题,JS的那些只读常量,有没有办法改?例如document.referrer?
回复

使用道具 举报

6

主题

23

帖子

138

积分

一级会员

Rank: 2

积分
138
发表于 2017-9-11 16:55:02 | 显示全部楼层
楼主搞定没有,我想添加一个Referer的头该怎么弄呢?
回复

使用道具 举报

6

主题

23

帖子

138

积分

一级会员

Rank: 2

积分
138
发表于 2017-9-12 17:16:35 | 显示全部楼层
原来是这样控制的

  1. import raw.apiHook;

  2. HttpAddRequestHeadersW = function (a1,a2,a3,a4) {
  3.         var header=raw.str(a2,true);
  4.         header=header+'\r\nX-Forwarded-For: 119.29.146.66\r\n'u;
  5.         var aa=raw.toPointer(header)
  6.     return hookW.callApi(a1,aa,-1,a4);
  7. }
  8. hookW = raw.apiHook("wininet.dll", "HttpAddRequestHeadersW", "bool(int,pointer ,int,int)", HttpAddRequestHeadersW).install();
复制代码
回复

使用道具 举报

123

主题

1848

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10309
发表于 2017-9-15 11:36:44 | 显示全部楼层
zsea 发表于 2017-9-12 17:16
原来是这样控制的

HttpAddRequestHeadersW的第二个参数只要是字符串就行,这种参数API并不关心指针地址,所以可以直接指定为Unicode字符串(ustring):
import raw.apiHook;
hookHttpHeaders = raw.apiHook(
"wininet.dll", "HttpAddRequestHeadersW"
    ,
"bool(ptr hRq,ustring headers,INT len,INT modifiers)"
   
    ,
function(hRq,headers,len,modifiers){
         
return owner.callApi(hRq,headers+'\r\nTest: 119.29.146.66\r\n',len,modifiers);
    }
)
hookHttpHeaders.install();

因为unstring会自动转换为aardio默认的UTF8编码,操作起来会更方便。


拼接HTTP头容易出错,可以使用web.joinHeaders函数拼接(支持以字符串、键值表等不同形式写HTTP头),完整例子:
import win.ui;
/*DSG{{*/
var winform = win.form(text="Web Form";right=759;bottom=469)
/*}}*/

import web.form;
var wb = web.form( winform );

import raw.apiHook;
hookHttpHeaders = raw.apiHook(
"wininet.dll", "HttpAddRequestHeadersW"
    ,
"bool(ptr hRq,ustring headers,INT len,INT modifiers)"
   
    ,
function(hRq,headers,len,modifiers){
        headers = web.joinHeaders(headers,{Test=
"119.29.146.66"});
        
return owner.callApi(hRq,headers,len,modifiers);
    }
)
hookHttpHeaders.install();  

wb.go(
"http://httpbin.org/headers");

winform.show();
win.loopMessage();


1、论坛发贴请包含相关测试代码,代码写的不好没有关系,种种原因不能写代码、不愿写代码的问题自行解决。
2、BUG,意见建议请点击页面右上方链接提交。

违者罚!
回复

使用道具 举报

123

主题

1848

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10309
发表于 2017-9-15 11:39:38 | 显示全部楼层
因为inet.http与web.form是共享会话的,所以要在web.form里对HTTP请求做更多的控制,也可以直接用inet.http发送请求。

1、论坛发贴请包含相关测试代码,代码写的不好没有关系,种种原因不能写代码、不愿写代码的问题自行解决。
2、BUG,意见建议请点击页面右上方链接提交。

违者罚!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2017-11-23 20:38 , Processed in 0.062500 second(s), 17 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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