搜索
aardio官方社区 门户 查看主题

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

发布者: tdweb | 发布时间: 2013-1-10 16:58| 查看数: 1569| 评论数: 7|帖子模式

有个需求,就是在执行wb.click()的时候,修改一下web.form的header
看到addHeader只在post 和 go 的时候使用,请问如果用click,点某个链接,怎么才能修改header呢?

最新评论

不争 发表于 2013-1-10 19:05:02

这个只有用API钩子了

这个只有用API钩子了
tdweb 发表于 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钩子应该怎么用,谢谢!!
tdweb 发表于 2013-1-11 12:57:21

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

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

可是还有个问题,JS的那些只读常量,有没有办法改?例如document.referrer?
zsea 发表于 2017-9-11 16:55:02
楼主搞定没有,我想添加一个Referer的头该怎么弄呢?
zsea 发表于 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();
复制代码
Jacen.He 发表于 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();

Jacen.He 发表于 2017-9-15 11:39:38
因为inet.http与web.form是共享会话的,所以要在web.form里对HTTP请求做更多的控制,也可以直接用inet.http发送请求。

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

GMT+8, 2017-9-25 19:21 , Processed in 0.062500 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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