1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hướng dẫn [v14.0.6 - 23/7/2019] HttpRequest cho người mới bắt đầu - Ví dụ, hình ảnh chi tiết

Thảo luận trong 'Hướng dẫn - Bài tập căn bản' bắt đầu bởi Huân Hoàng, 13/3/16.

  1. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    à, trang này kiểu như sau khi đăng nhập thì nó tạo một chuỗi _afrLoop để quản lý session, bởi vậy muốn request ra trang chuẩn sau khi login thì phải làm thêm bước tách cái _afrLoop từ source javascript mà nó trả về, rồi nối vào tham số của URL trang chủ là xong hà :v Mới đầu iêm tưởng _afrLoop nó là chuỗi random xuất hiện nên làm mãi cũng không ra, sau phát hiện thì ra phải khớp với _afrLoop trong source js trả về sau khi đăng nhập mới được.:D

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $rq = _HttpRequest(2, 'https://cic.org.vn/webcenter/j_security_check', 'j_username=h01833001hung&j_password=1211ekob&j_character_encoding=UTF-8&Login=Login')
    $_afrLoop = StringRegExp($rq, '_addParam\(query, "_afrLoop", "(\d+)"\);', 1)[0]
    $rq = _HttpRequest(2, 'https://cic.org.vn/webcenter/portal/CMSPortal?_afrLoop=' & $_afrLoop)
    _HttpRequest_Test($rq)
     
    [​IMG]
     
    Anh Gấu and Thiendy like this.
  2. Thiendy

    Thiendy Thành viên mới
    • 3/6

    Tham gia ngày:
    22/11/18
    Bài viết:
    14
    Đã được thích:
    3
    Thank Bác rất nhiều ạ

    vậy là quản lý đăng nhập bằng mã _afrLoop chứ không phải bằng cookie.


    /-strong /-strong
     
  3. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Sử dụng cấu trúc $iReturn = '$' + Đường dẫn lưu tập tin.
    Ví dụ lưu ảnh trên ra desktop:
    Mã (AutoIt):
    #include <_HttpRequest.au3>
    _HttpRequest('$' & @DesktopDir & '\captcha.png', 'https://tp.fecredit.com.vn/Captcha_GetImgText.ashx?CaptchaText=LvgOJgFju4PsBfqTI4OAtgV6IAcs%2fnvSXE%2fTPvNQwYs%3d')
     
     
    Thiendy thích bài này.
  4. Thiendy

    Thiendy Thành viên mới
    • 3/6

    Tham gia ngày:
    22/11/18
    Bài viết:
    14
    Đã được thích:
    3
    OK. Thank bác Huân Hoàng nhiều
     
  5. chien

    chien Thành viên mới
    • 3/6

    Tham gia ngày:
    22/2/16
    Bài viết:
    6
    Đã được thích:
    2
    các bác cho mình hỏi làm sao mình dùng hàm setproxy nhưng không chạy được trên vps. ai biết hướng dẫn mình với.
     
  6. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Thým vào UDF tìm dòng:
    Mã (AutoIt):
            _WinHttpSetOption2($g___hOpen[$g___LastSession], 84, 0xA80) ;OPTION_SECURE_PROTOCOLS = 0xA80 (TSL), 0xA8 (SSL + TSL1.0), 0xA00 (TSL1_1 + TSL1_2)
    [​IMG]

    Sửa số 0xA80 thành mấy giá trị khác mà iêm đã ghi chú thử xem được không.

    Với lại iêm nhớ hình như iêm đã từng đọc ở đâu trên mạng là WinHttp chạy trên VPS muốn chạy với Proxy thì phải config gì đó trên VPS thì phải.
     
  7. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    @Thiendy Code của thým đúng gần hết rồi, sai 2 chỗ nhỏ xíu đi luôn cái code :v

    1/ Dòng:
    Mã (AutoIt):
    $KeyCIC = StringRegExp($Request_Home, 'name="javax.faces.ViewState" value="!(.*?)"></spa', 1)[0]
    Bị dôi ra dấu ! trong value="!(.*?)" kìa, phải bỏ dấu ! đó đi, để như này là được:
    Mã (AutoIt):
    $KeyCIC = StringRegExp($Request_Home, 'name="javax.faces.ViewState" value="(.*?)"', 1)[0]
    2/ Giá trị $PostCIC chưa được encode, thým sửa $PostCIC thành:
    Mã (AutoIt):
    $PostCIC = 'T:oc_5065589220region1:soc10=0&T:oc_5065589220region1:strLoaiKH=1&T:oc_5065589220region1:txtmacic=&T:oc_5065589220region1:txttenkh=&T:oc_5065589220region1:txtdkkd=&T:oc_5065589220region1:txtmsthue=&T:oc_5065589220region1:txtsocmt=' & $ID & '&T:oc_5065589220region1:txtcif=&T:oc_5065589220region1:pc1:j_id58=20&org.apache.myfaces.trinidad.faces.FORM=f1&javax.faces.ViewState=' & $KeyCIC & '&oracle.adf.view.rich.RENDER=T%3Aoc_5065589220region1&event=T%3Aoc_5065589220region1%3Abtntimkiemkh&event.T:oc_5065589220region1:btntimkiemkh=%3Cm+xmlns%3D%22http%3A%2F%2Foracle.com%2FrichClient%2Fcomm%22%3E%3Ck+v%3D%22type%22%3E%3Cs%3Eaction%3C%2Fs%3E%3C%2Fk%3E%3C%2Fm%3E&oracle.adf.view.rich.PROCESS=T%3Aoc_5065589220region1'
    hoặc rút gọn giá trị thừa cho gọn hơn như thế này:
    Mã (AutoIt):
    $PostCIC = 'T:oc_5065589220region1:strLoaiKH=1&T:oc_5065589220region1:txtsocmt=' & $ID & '&javax.faces.ViewState=' & $KeyCIC & '&event=T%3Aoc_5065589220region1%3Abtntimkiemkh&event.T:oc_5065589220region1:btntimkiemkh=%3Cm+xmlns%3D%22http%3A%2F%2Foracle.com%2FrichClient%2Fcomm%22%3E%3Ck+v%3D%22type%22%3E%3Cs%3Eaction%3C%2Fs%3E%3C%2Fk%3E%3C%2Fm%3E&oracle.adf.view.rich.PROCESS=T%3Aoc_5065589220region1'
    ---------------------------------------------------------------------​

    Sửa xong 2 chỗ đó là OK :D

    [​IMG]
     
    Thiendy thích bài này.
  8. Thiendy

    Thiendy Thành viên mới
    • 3/6

    Tham gia ngày:
    22/11/18
    Bài viết:
    14
    Đã được thích:
    3
    em đã chạy được rồi
    Thank bác rất nhiều :D
     
  9. longtu

    longtu Thành viên
    • 18/23

    Tham gia ngày:
    9/8/17
    Bài viết:
    67
    Đã được thích:
    37
    $HTML = _HTMLDecode($HTML, '&#')
     
    Thiendy thích bài này.
  10. Thiendy

    Thiendy Thành viên mới
    • 3/6

    Tham gia ngày:
    22/11/18
    Bài viết:
    14
    Đã được thích:
    3
    ok. thanks ạ
     
  11. rungxanhlv

    rungxanhlv Thành viên mới
    • 3/6

    Tham gia ngày:
    13/6/18
    Bài viết:
    6
    Đã được thích:
    1
    bác huân hoàng cho em hỏi chút ạ!

    em request tới trang https://login.microsoftonline.com mà nó báo là 'Your browser is currently set to block cookies' thì làm thế nào ạ?

    Bác cho em xin code login trang azure được không? em mới tập tành code :D
    Thanks!
     
    Chỉnh sửa cuối: 1/12/18
  12. 7n3w

    7n3w Thành viên mới
    • 3/6

    Tham gia ngày:
    12/8/17
    Bài viết:
    5
    Đã được thích:
    3
    Bác @Huân Hoàng ơi, ver sau bác có thể bât 2 chế độ cho hàm _IE_RecaptchaBox
    Mặc định hàm _IE_RecaptchaBox chỉ đọc được các dữ liệu từ domain chính. Nhưng có trang nó chỉ có recaptcha ở các trang con nên hàm _IE_RecaptchaBox không xử lý được
     
  13. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Thông báo đó là do nó liên quan javascript. Hàng của ông lớn Microsoft thì không giúp được thým rồi, auto trình duyệt thôi chứ request thuần tuý thì không nổi đâu :p
     
  14. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Làm được bình thường mà nhể, iêm test thử các link mẫu trong hình dưới đều ra ngọt:

    [​IMG]

    Có thể trang thým làm SiteKey của recaptcha nó nằm trong javascript, nếu là trường hợp đó thì phải điền vào tham số $Custom_RegExp_GetDataSiteKey của hàm _IE_RecaptchaBox mẫu pattern RegExp lấy SiteKey.

    Còn cụ thể thì thým quăng link iêm check thử xem sao.
     
  15. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    Có một thým sau khi đọc câu hỏi của thým này: http://autoitvn.com/threads/ver-14-...h-anh-buoc-lam-chi-tiet.267/page-32#post-7433 và câu trả lời iêm:
    thì có thử làm request về Subscribe Channel Youtube và thým ấy có hỏi iêm sao làm không được (sau thì thým ấy có để ghi chú là đã làm được rồi), nhưng iêm vẫn muốn đăng lại đoạn code về Subscribe Channel để ai đang học về request và có hứng thú với tương tác Google thông qua hàm _HttpRequest_GoogleLogin sẽ có thêm bài học bổ ích để tích luỹ kinh nghiệm request cho bản thân :p

    -----------------------------------------------------------------------------------------
    - Như iêm đã nói trong bài trả lời ở trên, để request Subscribe/Like/Unlike/Comment... Youtube thì cần tìm các giá trị clickTrackingParams params, tuy nhiên source HTML (đã đăng nhập YT) có rất nhiều giá trị clickTrackingParams → Vì là request Subscribe nên phải tìm clickTrackingParams ngay đằng sau chuỗi "subscribeEndpoint" (Tương tự, nếu là request Like thì tìm ngay đằng sau "LikeEndpoint", ....)

    - Thế nhưng, một số kênh lớn còn có thể chứa rất nhiều "subscribeEndpoint" trong source nữa, ví dụ nhoé:

    [​IMG]

    → Vì vậy để code luôn chạy và tìm chính xác tham số clickTrackingParamsparams để nạp cho Data2Send thì cần làm thêm công đoạn tách ra tất cả subscribeEndpoint ra Mảng như hình trên, rồi dùng vòng lặp kiểm tra Mảng đó, nếu đúng Channel cần Subscibe thì lấy các tham số từ phần tử Mảng đó.
    Vì sao không tách theo channel từ regexp luôn mà mất công đi regexp ra mảng rồi dùng vòng lặp thì iêm xin thưa là do cấu trúc json của EndPoint thay đổi lung tung mỗi lần request nhoé (như hình trên "channelIds" nằm ở đầu, nhưng request khác lại nằm ở giữa, ở cuối...) :p

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    Local $User = ''
    Local $Pswd = ''
    _HttpRequest_GoogleLogin($User, $Pswd, 'https://www.youtube.com')
    ;------------------------------------------------------------------------------------;

    $KQ1 = _YT_Channel_Subscribe('UCdDe8wmoRlE7HplVKumZpAA') ;https://www.youtube.com/channel/UCdDe8wmoRlE7HplVKumZpAA
    MsgBox(4096, 'KQ: Error=' & @error, $KQ1)

    $KQ2 = _YT_Channel_Subscribe('UCB849xB6Z17yR_CxuNEwqSQ') ;https://www.youtube.com/channel/UCB849xB6Z17yR_CxuNEwqSQ
    MsgBox(4096, 'KQ: Error=' & @error, $KQ2)



    Func _YT_Channel_Subscribe($channelIds)
       Local $RQ = _HttpRequest(2, 'https://www.youtube.com/channel/' & $channelIds)
       ;----------------------------------------------------------------------------------------------------------------------
       Local $Array_subscribeEndpoint = StringRegExp($RQ, '("subscribeEndpoint":.*?)"unsubscribeEndpoint":', 3)
       If @error Then Return SetError(1, '', '')
       ;------------------------------
       For $i = 0 To UBound($Array_subscribeEndpoint) - 1 ;Kiếm subscribeEndpoint phù hợp với channel
           If StringInStr($Array_subscribeEndpoint[$i], '"channelIds":["' & $channelIds & '"]', 0, 1) Then ExitLoop
       Next
       If $i = UBound($Array_subscribeEndpoint) Then Return SetError(2, '', '') ;Có nghĩa là tìm hết trong mảng vẫn không thấy channel muốn subscribe
       Local $subscribeEndpoint = $Array_subscribeEndpoint[$i]
       ;-------------------------------
       Local $csn = StringRegExp($RQ, '"csn":"(.*?)"', 1)
       Local $session_token = StringRegExp($RQ, '"XSRF_TOKEN":"(.*?)"', 1)
       Local $params = StringRegExp($subscribeEndpoint, '"params":"(.*?)"', 1)
       Local $clickTrackingParams = StringRegExp($subscribeEndpoint, '"clickTrackingParams":"(.*?)"', 1)
       If Not IsArray($clickTrackingParams) Or Not IsArray($params) Or Not IsArray($csn) Or Not IsArray($session_token) Then Return SetError(3, '', '')
       ;-------------------------------
       Local $Data2Send = 'sej=' & _URIEncode('{"clickTrackingParams":"' & $clickTrackingParams[0] & '","commandMetadata":{"webCommandMetadata":{"url":"/service_ajax","sendPost":true}},"subscribeEndpoint":{"channelIds":["' & $channelIds & '"],"params":"' & $params[0] & '"}}') & '&csn=' & $csn[0] & '&session_token=' & _URIEncode($session_token[0])
       ;------------------------------------------------------------------------------------;
       $RQ = _HttpRequest(2, 'https://www.youtube.com/service_ajax?name=subscribeEndpoint', $Data2Send)
       If StringInStr($RQ, '"code":"SUCCESS"') Then
           ConsoleWrite(@CRLF & '! Subscribe: SUCCESS' & @CRLF)
           Return $RQ
       Else
           ConsoleWrite(@CRLF & '! Subscribe: FAIL' & @CRLF)
           Return SetError(4, '', '')
       EndIf
    EndFunc

    [​IMG]

    Tương tự, để Unsubscribe, Like, Unlike, Comment .... thì làm như trên, tách ra tất cả endpoint cần (LikEndpoint, UnlikeEndpoint...) rồi kiểm tra đúng channel không rồi mới tách lấy giá trị data2send, như vậy thì code không bao giờ chạy sai được :p
     
    Tungtata thích bài này.
  16. chien

    chien Thành viên mới
    • 3/6

    Tham gia ngày:
    22/2/16
    Bài viết:
    6
    Đã được thích:
    2
    [​IMG]

    mình hay bị lỗi này, có cách nào mà nếu gặp lỗi này nó vẫn chạy tiếp không bạn
     
  17. longtu

    longtu Thành viên
    • 18/23

    Tham gia ngày:
    9/8/17
    Bài viết:
    67
    Đã được thích:
    37
    bản 14.0.2 tui thấy hết bị lỗi này r. tui cá là bác xài bản cũ còn bản mới nó là: $sResult = ($iReturnHTML ? $oBody.innerHTML : $oBody.innerText)
     
    chien thích bài này.
  18. Huân Hoàng

    Huân Hoàng Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181

    Ặc, câu này không khó đâu, mỗi tội cái Data2Send thým lấy ở đâu mà sai bét hết rồi :v

    Cấu trúc của Data2Send iêm có mô tả kỹ trong file Help là:
    • Key1=Value1&Key2=Value2&Key3=Value3&..... hoặc
    • _URIEncode(Key1)=_URIEncode(Value1)&_URIEncode(Key2)=_URIEncode(Value2)&.....
    trong khi code thým cái dấu = lại bị encode sang %3D, dấu & thành %26 hết thế kia ??? :|

    Request chuẩn lấy từ Live HTTP Headers của iêm:
    PHP:
    https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway?requestID=7000003

    GET /finnsso/gateway/SSOGateway?requestID=7000003 HTTP/1.1
    Host: cps.fecredit.com.vn
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US
    Accept-Encoding: gzip, deflate, br
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Date: Sun, 09 Dec 2018 17:33:35 GMT
    Pragma: no-cache
    Content-Length: 7653
    Content-Type: text/html; charset=UTF-8
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Set-Cookie: JSESSIONID=i9GUCBD4ObV-qI05PpbIL2Gzyc.....
    Set-Cookie: NSC_WJQ_G1_TTP=ffffffff0916711a45525d5......
    ----------------------------------------------------------
    https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway

    POST /finnsso/gateway/SSOGateway HTTP/1.1
    Host: cps.fecredit.com.vn
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
    *;q=0.8
    Accept-Language: en-US
    Accept-Encoding: gzip, deflate, br
    Referer: https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway?requestID=7000003
    Cookie: JSESSIONID=i9GUCBD4ObV-qI05PpbIL2....NSC_WJQ_G1_TTP=ffffffff091671...
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 216
    hdCodeCan=PWUS&requestID=7000001&prevUserID=&hdLang=E&hdLanguageNew=E&hdLocal=E&token=8385291597320145364859717024629271544376815883&hdlogin=N&TxtUID=123456&TxtPWD=7c4a8d09ca3762af61e59520943dc26494f8941b&DataAction=

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Date: Sun, 09 Dec 2018 17:34:17 GMT
    Pragma: no-cache
    Content-Length: 7791
    Content-Type: text/html; charset=UTF-8
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    Set-Cookie: JSESSIONID=QZaUCLUQoU0dGTRcWsHGtZtGZLa6....
    Set-Cookie: NSC_WJQ_G1_TTP=ffffffff0916711a45525d5f4f58455e4...
    Code thým sửa Data2Send chuẩn theo Live HTTP Headers trên là ra cái một dễ ợt thôi :v

    Lưu ý
    : Password trong Data2Send đã bị mã hoá, còn mã hoá theo cách nào thì xem source html (nếu loại dễ) hoặc js (nếu khó) thì thấy ngay từ source html dòng sau:

    [​IMG]
    → Password bị mã hoá SHA-1 cơ bản thôi :D

    Vậy là ta có code:

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $User = 'TL000061'
    $Pass = 'Mật khẩu gốc'

    $URL = 'https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway'
    $RQ_Link = _HttpRequest(2, $URL & '?requestID=7000003')
    $Token = StringRegExp($RQ_Link, 'token" VALUE="(.*?)"/', 1)[0]
    $RQ_Login = _HttpRequest(2, $URL, 'hdCodeCan=PWUS&requestID=7000001&prevUserID=&hdLang=E&hdLanguageNew=E&hdLocal=E&token=' & $Token & '&hdlogin=N&TxtUID=' & $User & '&TxtPWD=' & _GetSHA1($Pass) & '&DataAction=')
    _HttpRequest_Test($RQ_Login)
     

    [​IMG]
     
    Thiendy thích bài này.
  19. Only Love

    Only Love Thành viên
    • 18/23

    Tham gia ngày:
    8/9/15
    Bài viết:
    69
    Đã được thích:
    59
    bro rq đến địa chỉ https://www.xvideos.com/account/signinform trc để tìm csrf_token, nó trong chuỗi ntn:
    <input type=\"hidden\" value=\"3f04a904545d54f3tkWskZE7yjcj0fPAJVkWDHgWbrj\" name=\"signin-form[csrf_token]\" id=\"signin-form_csrf_token\" \/>

    rq post login với csrf_token đã tìm đk
     
  20. Only Love

    Only Love Thành viên
    • 18/23

    Tham gia ngày:
    8/9/15
    Bài viết:
    69
    Đã được thích:
    59
    @Huân Hoàng e mới phát hiện 1 lỗi của hàm _Js_Execute là 1 số mã js thì hàm này trả về kq kèm theo dấu cách (space) ở cuối, vd: kết quả giải đáng lẽ phải là "12ec345da34caa" thì nó ra là "12ec345da34caa " làm rq k thành công đc. e mò lỗi code nguyên hôm wa mới phát hiện ra, vì là dấu cách nên k để ý thật kỹ là k tìm ra nổi. bro fix nhanh nha.

    à bản 13 k bị, bản mới thì bị nha
     
    Huân Hoàng thích bài này.

Chia sẻ trang này

Đang tải...