|
楼主 |
发表于 2014-10-22 16:56
|
显示全部楼层
本帖最后由 wcymiss 于 2014-10-24 16:18 编辑
再上一个动态参数的例子:
网站:http://www.abchina.com/cn/Public ... t20101217_45743.htm
操作:币种选择“日元(JPY)”,日期选择从2014年10月1日到今天,点击查询,然后查看第6页的数据。
抓包分析步骤:
1、操作网页并抓包,复制数据。
复制数字不要包括末尾的0。因为这些0有可能是某种格式的效果,并非是数据的一部分。把0一起复制进去有可能搜索不到网页。
2、搜索该数字,确认数据网页
3、查看Request框中Raw的内容,SendData里有参数,并且有被编码的字符:
不能用被编码的字符进行搜索。
Request框中WebForms里可以看到参数的字符原型:
代表页码的参数是“__EVENTARGUMENT”。
4、参数太长了,fiddler的搜索框里放不下,只能截取部分字符进行搜索:
搜索到后不要忘了对整段字符串进行校对。
5、第2步骤里确认的数据网页的动态参数的来源已确认,但此网页本身也有动态参数:
6、搜索第二个动态参数。
7、找到最初源头了。这个网页没有参数了。好了,代码就从这里开始吧!
成型代码:- Sub Main()
- Dim strUrl As String
- Dim strText As String
- Dim VIEWSTATE As String
- Dim EVENTVALIDATION As String
- Dim strDdr1 As String
- Dim strDatepicker1 As String
- Dim strDatepicker2 As String
- Dim intPageNum As Integer
-
- strUrl = "http://app.abchina.com/rateinfo/RateHistorySearch.aspx"
- strDdr1 = "日元(JPY)" '币种
- strDatepicker1 = "2014-10-01"
- strDatepicker2 = "2014-10-22"
- intPageNum = 6 '页码
-
- With CreateObject("MSXML2.XMLHTTP")
- '第一次GET,获取VIEWSTATE和EVENTVALIDATION
- .Open "GET", strUrl, False
- .send
- strText = .responsetext
- VIEWSTATE = encodeURI(CStr(Split(Split(strText, "__VIEWSTATE"" value=""")(1), """ />")(0)))
- EVENTVALIDATION = encodeURI(CStr(Split(Split(strText, "__EVENTVALIDATION"" value=""")(1), """ />")(0)))
-
- '第二次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
- VIEWSTATE = encodeURI(CStr(Split(Split(strText, "__VIEWSTATE"" value=""")(1), """ />")(0)))
- EVENTVALIDATION = encodeURI(CStr(Split(Split(strText, "__EVENTVALIDATION"" value=""")(1), """ />")(0)))
-
- '第三次POST,翻页
- .Open "POST", strUrl, False
- .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
- .send "__VIEWSTATE=" & VIEWSTATE _
- & "&__EVENTTARGET=PagerControl1" _
- & "&__EVENTARGUMENT=" & intPageNum _
- & "&__EVENTVALIDATION=" & EVENTVALIDATION _
- & "&ddr1=" & encodeURI(strDdr1) _
- & "&datepicker1=" & strDatepicker1 _
- & "&datepicker2=" & strDatepicker2 _
- & "&PagerControl1_input=1"
- strText = .responsetext
- Debug.Print strText
- End With
- End Sub
复制代码- Function encodeURI(strTobecoded As String) As String
- With CreateObject("msscriptcontrol.scriptcontrol")
- .Language = "JavaScript"
- encodeURI = .Eval("encodeURIComponent('" & strTobecoded & "');")
- 'encodeURIComponent无法转换括号,所以再替换下括号
- encodeURI = Replace(Replace(encodeURI, "(", "%28"), ")", "%29")
- End With
- End Function
复制代码 小贴士:aspx网页的数据查询大多有类似VIEWSTATE的参数,这个参数特点是:文本超长,且一层层传递。每层的VIEWSTATE值还会有一部分内容是相同的。所以搜索到参数值后一定要校对整个字符串是否完全一致。 |
评分
-
5
查看全部评分
-
|