|
本帖最后由 luqiwe 于 2021-10-26 15:16 编辑
移动公司满意度调查数据采集页是通过请求后台再生成前端网页的,网址:http://interzjmcrm.zj.chinamobile.com/mssp/dx/NFlyMwY77S1e,通过页面调试取得请求基础参数如下:- 请求 URL:
http://interzjmcrm.zj.chinamobile.com/mssp/page/c3VydmV5Q2xpZW50/pc/survey-front/service?isconvert=true&action=SURVEY_CHECK_001 - 请求方法:
POST - 远程地址:
218.205.68.116:80 - 引用站点策略:
strict-origin-when-cross-origin - 请求标头:
- Accept:
application/json, text/plain, */* - Accept-Encoding:
gzip, deflate - Accept-Language:
zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 - Connection:
keep-alive - Content-Length:
63 - Content-Type:
application/json;charset=UTF-8 - Cookie:
JSESSIONID=98DD07B48D7F3DFD101C4B8D99579262; SESSION_COOKIE=ssp-crm-web.8256195a-35c6-11ec-a69e-024242d764be - Host:
interzjmcrm.zj.chinamobile.com - Origin:
http://interzjmcrm.zj.chinamobile.com - Referer:
http://interzjmcrm.zj.chinamobile.com/mssp/page/surveyClient?goback=true&extSysCode=EA3DCCC5459B44F8D8AF9B27947F5CC8&orgId=4E97A6973C19755C&BillId=AB01054A37D12402321D1A377294AD3D3C299656D882771F&ContentId=02E8FD79D59D590C - User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30 - 由此我设计以下代码:
- Function Ajax_Post(ByVal StrUrl As String, Optional ByVal StrData As String, Optional ByVal Index As Long) As Variant On Error GoTo MyError: Dim Object As Object, S As String, B() As Byte Set Object = CreateObject("Microsoft.XMLHTTP") 'Set Object = CreateObject("WINHTTP.WinHttpRequest.5.1") Object.Open "POST", StrUrl, False Object.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" Object.setRequestHeader "Cookie", "JSESSIONID=637D2531A641D7F9FA5ED528A1264631; JSESSIONID=57418E46D57B8549B21BDBF57123D300; interzjmcrmok=interzjmcrm_66; SESSION_COOKIE=ssp-crm-web.542641bc-33f5-11ec-bb70-02421cd83759" 'Object.setRequestHeader "Content-Length", LenB(StrConv(StrData, vbFromUnicode)) Object.setRequestHeader "Content-Length", Len(StrData) Object.setRequestHeader "Referer", "http://interzjmcrm.zj.chinamobile.com/mssp/page/surveyClient?goback=true&extSysCode=EA3DCCC5459B44F8D8AF9B27947F5CC8&orgId=4E97A6973C19755C&BillId=AB01054A37D12402321D1A377294AD3D3C299656D882771F&ContentId=02E8FD79D59D590C" Object.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30" Object.send (StrData) Do Until Object.ReadyState = 4 DoEvents Loop Select Case Index Case 1: S = Object.responseText: Ajax_Post = S '返回字符串 Case 2: B = Object.responseBody: Ajax_Post = B '返回二进制 Case 3: S = BytesToStr(Object.responseBody): Ajax_Post = S '二进制转字符串[直接返回字串出现乱码时尝试] Case Else: Ajax_Post = vbNullString '无效的返回 End Select Set Object = Nothing '释放空间 Exit FunctionMyError: Ajax_Post = vbNullString '出错返回空End FunctionFunction BytesToStr(ByVal vIn) As String Dim strReturn As String, ThisCharCode As String, NextCharCode As String, I As Long For I = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn, I, 1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn, I + 1, 1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) I = I + 1 End If Next BytesToStr = strReturnEnd FunctionPrivate Sub Command1_Click() Dim Url As String, Key As Variant, JsonKey As String Url = "http://interzjmcrm.zj.chinamobile.com/mssp/page/c3VydmV5Q2xpZW50/pc/survey-front/service" '注:
JsonKey 摸拟JSON格式,对很多网站的JSON请求数据不能写成字串,否则服务器当未取得。 - JsonKey = "{" & Chr(34) & "isconvert" & Chr(34) & ":" & Chr(34) & "true" & Chr(34) & "," & Chr(34) & "action" & Chr(34) & ":" & Chr(34) & "SURVEY_CHECK_001" & Chr(34) & "}" debug.print Ajax_Post(Url, JsonKey, 1)End Sub
- 返回结果为:
- {"homepageUrl":"","id":"","retCode":"-9999","retMessage":"","trace":"","userMsg":""}
- 而调试页面的返回结果为:
- {isAnony: "0", isReplied: "0", retCode: "200", retDtl: "", retMessage: "", state: "0",…}
- imgSrc: ""
- isAnony: "0"
- isReplied: "0"
- redirectUrl: ""
- retCode: "200"
- retDtl: ""
- retMessage: ""
- state: "0"
- surveyData: {surveyType: 1, Desc: "感谢您参加浙江移动满意度调查,请针对以下问题进行打分,10分表示非常满意,1分表示非常不满意", SurveyId: 90002968,…}
- surveyId: "90002968"
- validState: "1"
- 显然VBA未能取得服务器数据,这里请数据采集高手指点,谢谢!
|
|