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 [Ver.14.0.2 - 4/12/2018] HttpRequest cho người mới bắt đầu - Ví dụ, hình ảnh, bước làm 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. rungxanhlv

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

    Tham gia ngày:
    13/6/18
    Bài viết:
    5
    Đã đượ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
  2. 7n3w

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

    Tham gia ngày:
    12/8/17
    Bài viết:
    4
    Đã được thích:
    2
    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
     
  3. Huân Hoàng

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

    Tham gia ngày:
    29/9/15
    Bài viết:
    580
    Đã được thích:
    1,050
    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
     
  4. Huân Hoàng

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

    Tham gia ngày:
    29/9/15
    Bài viết:
    580
    Đã được thích:
    1,050
    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.
     
  5. Huân Hoàng

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

    Tham gia ngày:
    29/9/15
    Bài viết:
    580
    Đã được thích:
    1,050
    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
     
  6. chien

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

    Tham gia ngày:
    22/2/16
    Bài viết:
    5
    Đã đượ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
     
  7. longtu

    longtu Thành viên
    • 8/11

    Tham gia ngày:
    9/8/17
    Bài viết:
    30
    Đã được thích:
    18
    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.
  8. Minh Dao

    Minh Dao Thành viên mới
    • 1/6

    Tham gia ngày:
    26/11/18
    Bài viết:
    4
    Đã được thích:
    0
    1) Các bác cho e hỏi , e muốn request 1 đường link để lấy source rồi get link bài viết trong vòng tầm 1 tháng chẳng hạn nhưng request nó chỉ get đc đến vài ngày đầu còn mấy ngày xa xa thì ko get đc, thì làm thế nào ạ ?
    code :
    Mã (AutoIt):
    $test=_HttpRequest(2,'https://www.facebook.com/search/str/Swiss/keywords_blended_posts?epa=FILTERS&jazoest=2651001217910510955111109816712189112858111589871035478726757737877115121566511556115515690114564810710275102815865100120109728666741181229078555410284811211089756106108108567245687050558611611470778750116112701218510495103&filters=eyJycF9hdXRob3IiOiJ7XCJuYW1lXCI6XCJhdXRob3JcIixcImFyZ3NcIjpcIjEwMDAwNjA4ODYzNzgxNlwifSIsInJwX2Nocm9ub19zb3J0Ijoie1wibmFtZVwiOlwiY2hyb25vc29ydFwiLFwiYXJnc1wiOlwiXCJ9In0=')

    FileWrite(@ScriptDir&'\test.html',$test)
    2) E muốn viết tool bitcointalk.org mà đăng nhập trang này nó bắt capcha, có hướng giải quyết nào cho cái này mà login ko cần giải capcha ko ạ ? :(

    Em là newbie, mong các bác pro giúp đỡ. Tks mn
     
  9. Only Love

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

    Tham gia ngày:
    8/9/15
    Bài viết:
    52
    Đã được thích:
    50
    câu 2: captcha sinh ra là để ngăn chặn những người muốn auto như bạn, bạn nghĩ sao mà không cần giải. Có 2 hướng giải quyết là mua api giải captcha của mấy trang decaptcha online (tốn tiền), hoặc sử dụng hàm _IE_RecaptchaBox trong udf của bác Huân Hoàng (không tốn tiền nhưng vẫn phải click recaptcha = tay)
     
  10. Minh Dao

    Minh Dao Thành viên mới
    • 1/6

    Tham gia ngày:
    26/11/18
    Bài viết:
    4
    Đã được thích:
    0
    cảm ơn bác, vậy nếu e muốn đăng nhập 100 acc thực hiện đi thực hiện lại 1 nhiệm vụ thì phải ngồi giải capcha 100 lần cơ ạ @@ ? E có 1 giải pháp là dùng 100 profile chrome đặt tên từ 1-100 và log in sẵn vào các acc, có cách nào tự động hóa vào từng profile và thực hiện nhiệm vụ ko bác ?
     
  11. Thiendy

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

    Tham gia ngày:
    22/11/18
    Bài viết:
    18
    Đã được thích:
    0
    em Request trang này mấy ngày mà chưa được. Các Pro giúp em với.
    User & pass em chưa có, nhưng khi nhập sai vẫn không hiện thông báo nhập sai user/pass
    bác xem code em thiếu chỗ nào.

    hình này đăng nhập sai trên trình duyệt
    [​IMG]

    hình này do em Request
    [​IMG]

    code của em
    Mã (AutoIt):
    #include <_HttpRequest.au3>

    $Link = 'https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway?requestID=7000003'
    $RQ_Link = _HttpRequest(2, $Link)

    $Cookie_Link = _GetCookie($RQ_Link)
    $Token = StringRegExp($RQ_Link, 'token" VALUE="(.*?)"/', 1)[0]

    $User = 'TL000061'
    $pass = '3D403867ec9b0fe8fb80746aab686123b18762a1af'

    $Post1 = 'hdCodeCan%3DPWUS%26requestID%3D7000001%26prevUserID%3D%26hdLang%3DE%26hdLanguageNew%3DE%26hdLocal%3DE%26token%3D'
    $Post2 = '%26hdlogin%3DN%26TxtUID%' & $User & '%26TxtPWD%' & $pass & '%26DataAction%3D'
    $Post = $Post1 & $Token & $Post2

    $Link_Login = 'https://cps.fecredit.com.vn/finnsso/gateway/SSOGateway'
    $RQ_Login = _HttpRequest(2, $Link_Login, $Post, $Cookie_Link, $Link)

    _HttpRequest_Test($RQ_Login)
     
     
  12. Huân Hoàng

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

    Tham gia ngày:
    29/9/15
    Bài viết:
    580
    Đã được thích:
    1,050
    Chưa hiểu câu 1 lắm, vì có đến 2 ý nghĩa: ý 1 là thým hỏi cái đường link của thým là get bài viết trong 1tháng nhưng chỉ trả về kết quả trong vài ngày đầu, ý 2 là thým có ý định chạy code liên tục suốt tháng nhưng code chạy được vài ngày thì crash báo lỗi. Vậy ý thým là gì ?

    Còn câu 2 thì như thým kia nói. Còn thým bảo tự động 100 profile chrome gì đó thì nên tìm hiểu thêm về WebDriver :v
     
  13. Huân Hoàng

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

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

    Ặ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.
  14. Minh Dao

    Minh Dao Thành viên mới
    • 1/6

    Tham gia ngày:
    26/11/18
    Bài viết:
    4
    Đã được thích:
    0
    ý câu 1 của e là định get link bài viết trong 1 tháng nhưng trả về thì đc có vài ngày đầu thôi ý ạ, có cách nào giải quyết ko ạ ? Tks a
     
  15. Only Love

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

    Tham gia ngày:
    8/9/15
    Bài viết:
    52
    Đã được thích:
    50
    @Minh Dao bro lướt fb trên browser thì lăn chuột tới cuối trang nó mới load tiếp nội dung kế tiếp, tương tự khi request thì bro phải tìm
    paging_next_token trong kết quả request hiện tại để request lấy nội dung kế, lặp lại quá trình đó cho tới khi lấy đủ nội dung bro mong muốn
     

Chia sẻ trang này

Đang tải...