ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wcymiss

[原创] 不懂html也来学网抓(xmlhttp/winhttp+fiddler)

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 14:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 wcymiss 于 2014-10-29 14:25 编辑

登录之后可以做什么----发送数据

上一贴说的是登录后查看邮件。这次来试一次发送邮件。


手工登录、发送邮件,同时抓包。


截取发送邮件内容的部分字符串作为搜索文本,找到session。


拷贝Request里相关内容,编写代码:
  1. Sub Main()
  2.     Const Username As String = "vbatest"
  3.     Const Password As String = "12341234"
  4.     Const Account As String = "vbatest@163.com"
  5.     Const ToAccount As String = "wcymiss@163.com"
  6.     Const Subject As String = "主题:用web发送邮件"
  7.     Const Content As String = "正文:看到此邮件则证明发送成功"
  8.     Dim strText As String
  9.     Dim Sid As String
  10.     Dim Senddata
  11.    
  12.     With CreateObject("MSXML2.XMLHTTP")
  13.         .Open "POST", "https://mail.163.com/entry/cgi/ntesdoor?df=mail163_letter&funcid=loginone&iframe=1&passtype=1&product=mail163&race=63_31_31_gz&uid=" & Username & "@163.com", False
  14.         .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
  15.         .Send "username=" & Username & "&password=" & Password
  16.         Sid = Split(Split(.responsetext, "sid=")(1), "&")(0)
  17.         
  18.         .Open "POST", "http://mail.163.com/js6/s?sid=" & Sid & "&func=mbox:compose&FrameMasterMailPopupClose=1&cl_send=2&l=compose&action=deliver", False
  19.         .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
  20.         .setrequestheader "Accept", "text/javascript" '不加这句的话返回的不是json是xml数据
  21.         Senddata = "var=" & encodeURI("<?xml version=""1.0""?>" _
  22.             & "<object>" _
  23.             & "<string name=""id"">c:" & GetLongTime() & "</string>" _
  24.             & "<object name=""attrs"">" _
  25.             & "<string name=""account"">" & Account & "</string>" _
  26.             & "<boolean name=""showOneRcpt"">false</boolean>" _
  27.             & "<array name=""to""><string>" & ToAccount & "</string></array>" _
  28.             & "<array name=""cc""/><array name=""bcc""/>" _
  29.             & "<string name=""subject"">" & Subject & "</string>" _
  30.             & "<boolean name=""isHtml"">true</boolean>" _
  31.             & "<string name=""content"">" & Content & "</string>" _
  32.             & "<int name=""priority"">3</int>" _
  33.             & "<boolean name=""saveSentCopy"">true</boolean>" _
  34.             & "<string name=""charset"">GBK</string></object>" _
  35.             & "<boolean name=""returnInfo"">false</boolean>" _
  36.             & "<string name=""action"">deliver</string>" _
  37.             & "<int name=""saveTextThreshold"">1048576</int>" _
  38.             & "</object>")
  39.         .Send Senddata
  40.         Debug.Print .responsetext
  41.     End With
  42. End Sub
  43. Function encodeURI(strTobecoded As String) As String
  44.     With CreateObject("msscriptcontrol.scriptcontrol")
  45.         .Language = "JavaScript"
  46.         encodeURI = .eval("encodeURIComponent('" & strTobecoded & "');")
  47.     End With
  48. End Function

  49. Function GetLongTime()
  50.     With CreateObject("msscriptcontrol.scriptcontrol")
  51.         .Language = "JavaScript"
  52.         GetLongTime = .eval("new Date().getTime();")
  53.     End With
  54. End Function
复制代码
SendData里有部分参数还可以精简。有兴趣的话可以自己测试。

GetLongTime自定义函数的作用是产生一个国际通用的表示当前时间的13位数字。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 14:32 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-29 16:20 编辑

像网易这么简单的登录毕竟少见。


很多网站的登录都会发送很多参数。参数是明码的、可以通过抓包搜索得到的,登录方法和第二篇章的获取数据的方法相同,这里就不再举例了。


下面将举一些比较复杂的、抓包后搜索不到明码参数的登录的例子。

复杂的登录需要学习Javascript知识。


Javascript知识入门请到这里:http://www.w3school.com.cn/js/index.asp

javascript知识深入请参阅此书:JavaScript权威指南(第6版)。下载地址:http://pan.baidu.com/s/1dDeOgoh

TA的精华主题

TA的得分主题

发表于 2014-10-29 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wcymiss 发表于 2014-10-22 16:56
再上一个动态参数的例子:

网站:http://www.abchina.com/cn/Public ... t20101217_45743.htm

一到第二次post的
VIEWSTATE = encodeURI(CStr(Split(Split(strText, "__VIEWSTATE"" value=""")(1), """ />")(0)))
就提示“下标越界”,看strText内容有错误提示,应该是没获得数据,不知道是不是strDatepicker2 = "2014-10-22" 这个日子的数据已经过期了,要重新来找?

点评

我执行的就是原代码。没改动一个地方。此时测试正确。  发表于 2014-10-29 15:42

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 15:44 | 显示全部楼层
本帖最后由 wcymiss 于 2014-10-30 18:34 编辑

复杂登录一:搜房网登录

网站:http://agent.soufun.com/

做登录测试不用真实的用户名和密码也可以进行的。它与真实的用户名密码抓到的包,区别就是登录页面的Response信息不同,但Request信息是一样的。Response的内容仅仅是一个参考,不影响我们代码的编写。当然,有真实的用户名密码更好,你可以验证你的登录代码是否编写正确。


登录并用fiddler抓包。

以用户名作为搜索文本,搜到一个POST的session。
看其发送参数:

搜房网登录1.png

该SendData里有四个参数,其中两个参数名是username和userpwd,根据这个可以判断该Session是我们要找的登录session。

再观察webforms里所有的参数:(QueryString有1个,Body里有4个)
str_username是用户名,rememberme应该是对应网页上的“记住我的用户名”的参数,submit1是提交的意思,应该也是固定的值。这样,有动态嫌疑的就是str_userpwd和codev了。str_userpwd很明显是加密过的字符串。

首先处理codev。
搜索codev的值(我这里抓包的是6534),发现找不到。
以“codev”为搜索内容,再次搜索:

搜房网登录2.png

可见,“6534”是变量v_rand的值,而这个值,是由随机函数产生的!

所以我们在vba里也可以定义一个变量v_rand,然后,我们仿照javascript里的赋值语句也给这个vba变量赋值:
  1. v_rand = Round(Rnd() * 10000)
复制代码
这样,动态参数codev就做好了。

接下来搜索str_userpwd参数那个字母数字混合的字符串值,还是搜不到。
于是搜str_userpwd试试。

还是在h t t p://agent.fang.com/ 这个网页里找到了str_userpwd,且这个页面里有多个str_userpwd。我们一个个来看下:
1、var str_userpwd = document.getElementById("str_userpwd").value;
    这句仅仅是取值,没有加密算法;
2、if (str_userpwd == "") {
    这句是判断密码是否为空。为空的话执行后面的提示。
3、function cmdEncrypt() {
            if ($("#str_userpwd").val().length < 17) {
                setMaxDigits(129);
                var key = new RSAKeyPair("010001", "", "一串字母数字混合文本");
                var pwdRtn = encryptedString(key, $("#str_userpwd").attr("value"));
                $("#str_userpwd").attr("value", pwdRtn);
            }
        }
    这个函数先是判断密码是否小于17位。小于17位就执行后面多个语句,最后把密码框的值用变量pwdRtn的内容代替。
  再顺藤摸瓜,查找cmdEncrypt,发现它在函数loginSubmit内。至于函数loginSubmit,一看就是有关登录的。
  再搜索loginSubmit,发现它是点击“登录”按钮触发的函数。于是整个事件就变成:

  点击登录按钮-----触发loginSubmit------执行函数cmdEncrypt-----密码少于17位的话把密码替换成pwdRtn值。
  
  上面的流程就是登录的真相!

  现在的关键是取pwdRtn的值!


pwdRtn值通过3步得到:
   1、setMaxDigits(129);
     2、var key = new RSAKeyPair("010001", "", "一串字母数字混合文本");
     3、var pwdRtn = encryptedString(key, $("#str_userpwd").attr("value"));
在fiddler里搜索这三个函数所在位置:
setMaxDigits在h t t p://img1.soufun.com/secondhouse/image/magent/js/BigInt.js 这个js文件里;
RSAKeyPair和encryptedString在h t t p://img1.soufun.com/secondhouse/image/magent/js/RSA.js 里。
再看RSA.js这个文件的前言:

搜房网登录3.png

我们还需要h t t p://img1.soufun.com/secondhouse/image/magent/js/Barrett.js

我们需要截取上述所有js函数后执行得出pwdRtn值,然后将其放入SendData里。

代码编写:
1、获取js文件的js代码:
  1. .Open "GET", "http://img1.soufun.com/secondhouse/image/magent/js/RSA.js", False
  2.         .Send
  3.         strJS= strJS & ";" & .responsetext
复制代码
另外两个js文件同上一样获取。

2、截取函数cmdEncrypt的执行语句,并把str_userpwd文本框的值替换为我们的密码变量。
  1. .Open "GET", "http://agent.fang.com/ ", False
  2. .Send
  3. strText = .responsetext
  4. strJSFun = Mid(strText, InStr(strText, "setMaxDigits("))
  5. strJSFun = Left(strJSFun, InStr(strJSFun, "$(""#str_userpwd"").attr(""value"", pwdRtn);") - 1)
  6. strJSFun = Replace(strJSFun, "$(""#str_userpwd"").attr(""value"")", UserPwd)
复制代码
3、将strJS和strJSFun结合后执行,取出pwdRtn值:
  1. pwdRtn = JSEval(strJS & ";" & strJSFun & ";pwdRtn")
复制代码
获取到这个pwdRtn后就可以登录了。

完整的代码:
  1. Sub Main()
  2.     Const UserName As String = "vbatest" '假设的账户
  3.     Const UserPwd As String = "12341234"
  4.     Dim strText As String
  5.     Dim strJS As String
  6.     Dim strJSFun As String
  7.     Dim pwdRtn As String
  8.    
  9.     With CreateObject("MSXML2.XMLHTTP")
  10.         '1、获取js文件的js代码:
  11.         .Open "GET", "http://img1.soufun.com/secondhouse/image/magent/js/RSA.js", False
  12.         .Send
  13.         strJS = .responsetext
  14.         .Open "GET", "http://img1.soufun.com/secondhouse/image/magent/js/BigInt.js", False
  15.         .Send
  16.         strJS = strJS & ";" & .responsetext
  17.         .Open "GET", "http://img1.soufun.com/secondhouse/image/magent/js/Barrett.js", False
  18.         .Send
  19.         strJS = strJS & ";" & .responsetext
  20.         
  21.         '2、截取函数cmdEncrypt的执行语句,并把获取str_userpwd文本框的值的代码替换为我们的密码变量。
  22.         .Open "GET", "http://agent.fang.com/", False
  23.         .Send
  24.         strText = .responsetext
  25.         strJSFun = Mid(strText, InStr(strText, "setMaxDigits("))
  26.         strJSFun = Left(strJSFun, InStr(strJSFun, "$(""#str_userpwd"").attr(""value"", pwdRtn);") - 1)
  27.         strJSFun = Replace(strJSFun, "$(""#str_userpwd"").attr(""value"")", "'" & UserPwd & "'")
  28.         
  29.         '3、将strJS和strJSFun结合后执行,取出pwdRtn值:
  30.         pwdRtn = JSEval(strJS & ";" & strJSFun & ";pwdRtn")
  31.         
  32.         '4、登录
  33.         .Open "POST", "http://agent.soufun.com/DealCenterLogin.aspx?codev=" & Round(Rnd() * 10000), False
  34.         .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  35.         .Send "str_username=" & UserName & "&str_userpwd=" & pwdRtn & "&Submit1=%B5%C7++%C2%BC"
  36.         Debug.Print .getallresponseheaders '有三个Set-Cookie表明登录成功
  37.         
  38.     End With
  39. End Sub

  40. Function JSEval(s As String) As String
  41.     With CreateObject("MSScriptControl.ScriptControl")
  42.         .Language = "javascript"
  43.         JSEval = .Eval(s)
  44.     End With
  45. End Function
复制代码
小贴士:
1、整个登录过程都用一个对象,这个对象中间不要关闭,以保留cookie。
2、三个js文件中的js代码都不含操作html的代码,所以可以直接放在ScriptControl控件里使用。如果有操作html的代码,如后面的$(""#str_userpwd"") 这种,那就不能直接JSEval。或者像上述那样更改代码,或者借用HtmlWindow来执行代码。
3、上述提取strJSFun的过程可以自己发挥,反正所需的三条JS语句不要少就行。
4、寻找加密算法的过程也可以借助浏览器的调试器。
5、解密这种网站,经验越多寻找加密算法的时间就越短。



呃,,总算是完工了,,这个寻找过程好像很难写啊。。。希望有人能看懂。。。。看不懂的跟我说啊

补充内容 (2014-11-17 09:24):
这段代码主要是加密参数的计算演示。要继续查询的话需要设置cookie。具体代码见491楼http://club.excelhome.net/forum. ... ;page=50#pid7949122

点评

参考:http://club.excelhome.net/thread-1084264-1-1.html  发表于 2014-10-29 23:25
辛苦了,另外一个JS文件也必须用到 http://img1.soufun.com/secondhouse/image/magent/js/Barrett.js  发表于 2014-10-29 23:24

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 16:27 | 显示全部楼层
本帖最后由 moon2778 于 2014-11-17 13:41 编辑

复杂登录二:58同城登录


网站:https://passport.58.com/login

代码运行时可能会跳出信任错误,请事先在internet选项中进行设置:
Internet选项----高级----安全,去掉“检查服务器证书吊销*”前面的勾。


登录并抓包。

找到登录网页,查看参数:
58登录1.png

搜索各参数名:

58登录3.png

上面的这几个是明码(值在网页里能找到)。

58登录2.png

这几个是加密数据,由javascript函数计算所得。

把参数来源列张表更清晰:

58登录4.png

接下来查找包含加密算法函数的JS文件:

找到:  

1、h t t ps://passport.58.com/js/v6/source/828ef34c77a2cbed693ba874ce570dfe.js?version=0.0.2
这个文件是由h t t ps://passport.58.com/static/ppt/js/5_1/comm_js/boot_passport_version.js里的函数产生的,所以我们需要先GET 后面那个js文件,以获取前面那个js文件名;

2、h t t ps://passport.58.com/rsa/ppt_security.js
这个文件里面包含了JQuery代码,所以同时还必须加载h t t ps://passport.58.com/static/js/5_1/jquery1.3.2.js

和上一次登录的例子不同,这次的JS函数包含了操作html的代码(JQuery大部分都是这种),不能在ScriptControl控件里运行了,必须在Html里运行。把js文件名写入DOM的script节点的src属性里,然后DOM的parentwindow就可以执行JS文件里的各种全局函数了。同前,vba代码编写的时候,最好用callbyname调用这些函数。

完整的代码:
  1. Sub Main()
  2.     Const strHost As String = "https://passport.58.com"
  3.     Const Username As String = "vbatest"
  4.     Const Password As String = "12341234"
  5.     Dim strText As String, SendData
  6.     Dim objDom As Object, objWin As Object, objXML As Object
  7.     Dim arrJSFile(), i As Integer, strJS As String
  8.     Dim path, pts, ptk, cd, timesign, timespan, p1, p2, p3, key1, key2
  9.    
  10.     '初始化赋值
  11.     Set objDom = CreateObject("htmlfile")
  12.     objDom.write "<script></script>" '添加一个空script节点
  13.     Set objWin = objDom.parentwindow
  14.     Set objXML = CreateObject("MSXML2.XMLHTTP")
  15.     arrJSFile = Array("jquery1.3.2.js", "ppt_security.js", "boot_passport_version.js") '要加载的js文件名
  16.    
  17.     '获取主页面的源代码
  18.     objXML.Open "GET", strHost & "/login", False
  19.     objXML.Send
  20.     strText = objXML.responsetext
  21.    
  22.     '获取各参数的明码值及运算时所需的值
  23.     path = Split(Split(strText, "name=""path"" value=""")(1), """")(0) '获取参数path
  24.     pts = Split(path, "/?pts=")(1) '用于timesign参数的计算
  25.     timespan = pts - CallByName(objWin, "eval", VbMethod, "new Date().getTime()") '用于timesign参数计算
  26.     ptk = Split(Split(strText, "id=""ptk"" value=""")(1), """")(0) '获取参数ptk
  27.     cd = Split(Split(strText, "id=""cd"" value=""")(1), """")(0) '获取参数cd
  28.     key1 = Split(Split(strText, """#password"").val()),""")(1), """")(0) 'encryptString函数的第二参数
  29.     key2 = Split(Split(strText, """#password"").val()),""" & key1 & """,""")(1), """")(0) 'encryptString函数的第三参数
  30.    
  31.     '先下载JS文件到缓存(GET请求一次即可),以提高DOM加载JS文件的速度。(否则加载会有延迟)
  32.     For i = 0 To 2
  33.         '58的js路径有时会变,用下面这个小函数在HTML代码里寻找js文件的完整路径名
  34.         arrJSFile(i) = FindJSFile(strText, arrJSFile(i), strHost)
  35.         objXML.Open "GET", arrJSFile(i), False
  36.         objXML.Send
  37.     Next
  38.    
  39.     '找到所需的第三个JS文件名并GET到缓存
  40.     strText = objXML.responsetext
  41.     arrJSFile(2) = Split(Split(strText, "try{var d=""")(1), """")(0) & Split(Split(strText, "just"":""")(1), """")(0)
  42.     objXML.Open "GET", arrJSFile(2), False
  43.     objXML.Send
  44.    
  45.     '将JS文件加载进HTML
  46.     For i = 0 To 2
  47.         strJS = strJS & "<script src=""" & arrJSFile(i) & """></script>"
  48.     Next
  49.     objDom.write strJS '加载
  50.    
  51.     '执行函数计算各参数的值
  52.     timesign = CStr(CallByName(objWin, "eval", VbMethod, "new Date().getTime()") + timespan)
  53.     p1 = CallByName(objWin, "getm32str", VbMethod, Password, timesign)
  54.     p2 = CallByName(objWin, "getm16str", VbMethod, Password, timesign)
  55.     p3 = CallByName(objWin, "encryptString", VbMethod, timesign & CallByName(objWin, "encodeURIComponent", VbMethod, Password), key1, key2)
  56.    
  57.     '生成POST用的SendData
  58.     SendData = "isweak=0"
  59.     SendData = SendData & "&path=" & path
  60.     SendData = SendData & "&p1=" & p1
  61.     SendData = SendData & "&p2=" & p2
  62.     SendData = SendData & "&p3=" & p3
  63.     SendData = SendData & "&timesign=" & timesign
  64.     SendData = SendData & "&ptk=" & ptk
  65.     SendData = SendData & "&cd=" & cd
  66.     SendData = SendData & "&username=" & Username
  67.     SendData = SendData & "&password=password"
  68.     SendData = SendData & "&mcresult=undefined"
  69.         
  70.     '登录
  71.     With objXML
  72.         .Open "POST", "https://passport.58.com/dounionlogin", False
  73.         .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  74.         .Send SendData
  75.         Debug.Print .getallresponseheaders '包含58cooper和58passport的Set-Cookie即为登录成功
  76.         Debug.Print .responsetext '成功时这里包含location
  77.     End With
  78.    
  79.     Set objXML = Nothing
  80.     Set objWin = Nothing
  81.     Set objDom = Nothing
  82. End Sub
  83. Function FindJSFile(Html As String, JSName, Host As String)
  84.     '在HTML代码里找到以JSName为名的JS文件的全路径名。没有Host的添加Host
  85.     With CreateObject("vbscript.regexp")
  86.         .Pattern = "[\s\S]+<script\s+(?:type=""text/javascript""\s+)?src=""([^""]+/" & Replace(JSName, ".", "\.") & ")""[\s\S]+"
  87.         FindJSFile = .Replace(Html, "$1")
  88.         If Not FindJSFile Like "http*" Then FindJSFile = Host & FindJSFile
  89.     End With
  90. End Function
复制代码

点评

或者登陆淘宝 https://unit.login.taobao.com/member/login.jhtml  发表于 2014-10-30 16:16
我觉得最复杂莫过登陆 网页版QQ并发送一条消息给好友。  发表于 2014-10-30 15:51

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-10-29 18:22 | 显示全部楼层
吴姐,没事唠唠淘宝API的应用吧,嘿嘿,相信这很多人感兴趣。。

点评

什么叫 淘宝API,名字听上去像高大上的样子  发表于 2014-10-30 16:54

TA的精华主题

TA的得分主题

发表于 2014-10-29 19:10 | 显示全部楼层
wcymiss 发表于 2014-10-22 16:56
再上一个动态参数的例子:

网站:http://www.abchina.com/cn/Public ... t20101217_45743.htm

吴老师,我就是下面这段过不去,得不到数据

'第二次POST,获取指定日期的VIEWSTATE和EVENTVALIDATION
        .Open "POST", strUrl, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .send "__VIEWSTATE=" & VIEWSTATE _
            & "&__EVENTVALIDATION=" & EVENTVALIDATION _
            & "&ddr1=" & encodeURI(strDdr1) _
            & "&datepicker1=" & strDatepicker1 _
            & "&datepicker2=" & strDatepicker2 _
            & "&btnSearch=" & encodeURI("搜索")
        strText = .responsetext
send 后面的参数我提取出来了,和我用fiddler搜出来的request中的__VIEWSTATE完全一样,但执行send后,strText的内容是:
<html>
    <head>
        <title>运行时错误</title>
        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>“/RateInfo”应用程序中的服务器错误。<hr width=100% size=1 color=silver></H1>

            <h2> <i>运行时错误</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> 说明: </b>服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。但可以通过在本地服务器计算机上运行的浏览器查看。
            <br><br>

            <b>详细信息:</b> 若要使他人能够在远程计算机上查看此特定错误消息的详细信息,请在位于当前 Web 应用程序根目录下的“web.config”配置文件中创建一个 &lt;customErrors&gt; 标记。然后应将此 &lt;customErrors&gt; 标记的“mode”属性设置为“Off”。<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config 配置文件 --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;Off&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</pre></code>

                  </td>
               </tr>
            </table>

            <br>

            <b>注释:</b> 通过修改应用程序的 &lt;customErrors&gt; 配置标记的“defaultRedirect”属性,使之指向自定义错误页的 URL,可以用自定义错误页替换所看到的当前错误页。<br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code><pre>

&lt;!-- Web.Config 配置文件 --&gt;

&lt;configuration&gt;
    &lt;system.web&gt;
        &lt;customErrors mode=&quot;RemoteOnly&quot; defaultRedirect=&quot;mycustompage.htm&quot;/&gt;
    &lt;/system.web&gt;
&lt;/configuration&gt;</pre></code>

                  </td>
               </tr>
            </table>

            <br>

    </body>
</html>

点评

完整的代码上一个附件。  发表于 2014-10-29 20:47

TA的精华主题

TA的得分主题

发表于 2014-10-29 19:50 | 显示全部楼层
帐号是;fangtest2014,mm是abc123,加密是怎么做的不知道,请吴姐提点一下。
  1. Sub 按钮1_单击()
  2.     Dim url, html, js
  3.     url = "http://agent.fang.com/DealCenterLogin.aspx?codev=6921"
  4.     Set html = CreateObject("htmlfile")
  5.     Set js = CreateObject("scriptcontrol")
  6.     js.Language = "jscript"
  7.     With CreateObject("msxml2.xmlhttp")
  8.         .Open "POST", url, False
  9.         
  10.         pd = "str_username=fangtest2014"
  11.         pd = pd & "&str_userpwd="
  12.         pd = pd & "1144d37ef253b0eb94172fa15446409c033465c439beba475dfe8ad68706c2dc40c3f8bcb40a345895b259eeffe354b0b62585cbedad493e111bb85280786f78f56496a80949d9868da6eb3a98a731e3d54555a9bf3ac394e2031043c998f7f8ac17c9d1b42f7ca8c096871427837924571bd35a960aacaed03c227ec73fb247"
  13.         pd = pd & "&rememberme=on"
  14.         pd = pd & "&Submit1=%B5%C7++%C2%BC"
  15.         
  16.         .setRequestheader "Host", "agent.fang.com"
  17.         .setRequestheader "Connection", "keep-alive"
  18.         .setRequestheader "Content-Length", Len(pd)
  19.         .setRequestheader "Cache-Control", "max-age=0"
  20.         .setRequestheader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
  21.         .setRequestheader "Origin", "http://agent.fang.com"
  22.         .setRequestheader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36"
  23.         .setRequestheader "Content-Type", "application/x-www-form-urlencoded"
  24.         .setRequestheader "Referer", "http://agent.fang.com/"
  25.         .setRequestheader "Accept-Encoding", "gzip,deflate"
  26.         .setRequestheader "Accept-Language", "zh-CN,zh;q=0.8"

  27.         .send (pd)
  28.         url = "http://n.agent.fang.com/magent/Manager.aspx"
  29.         .Open "GET", url, False
  30.         .send
  31.         
  32.       

  33.         MsgBox .responsetext
  34.     End With
  35. End Sub
复制代码

fangPOST.rar

9.02 KB, 下载次数: 80

点评

你这个就是我上面讲的那个搜房网登录呀。。  发表于 2014-10-29 20:48

TA的精华主题

TA的得分主题

发表于 2014-10-29 20:00 来自手机 | 显示全部楼层
wcymiss 发表于 2014-10-29 15:44
复杂登录一:暂缺



ET指什么?手机回复的

点评

www.exceltip.net  发表于 2014-10-29 22:25

TA的精华主题

TA的得分主题

发表于 2014-10-29 21:11 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 20:54 , Processed in 0.054531 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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