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
    Bạn đừng nghĩ nó phức tạp, chú ý phần lấy ảnh captcha và phần POST để reg acc là nhận ra ngay:

    1/ GET ảnh captcha:
    https://captcha2.zing.vn/captcha2/getcaptcha?publicKey=92140c0e46c54994812403f564787c14&token=7810a8c0fea4fe09adab69c611bc725a9549a128dc0839eb0babe2a719b25d8c1ee99488eae3147d122a87826c6d7e9ed5c0d725e2e57e51d26bb28d0095b65eaf5e3a4b05366d81ba2f1c98bb32d89a

    2/ POST data để reg acc:
    apikey=92140c0e46c54994812403f564787c14..................&gender=1&token=7810a8c0fea4fe09adab69c611bc725a9549a128dc0839eb0babe2a719b25d8c1ee99488eae3147d122a87826c6d7e9ed5c0d725e2e57e51d26bb28d0095b65eaf5e3a4b05366d81ba2f1c98bb32d89a&veryfied_code=66W3UP

    => Ứng với 1 Token thì sẽ là 1 mã captcha tương ứng
    => Dữ liệu cần post chỉ cần điền đúng mã captcha ứng với token là xong, chả cần biết nó request ra bao nhiêu cái token đi nữa :v
    Vậy ta có hàm tạo acc khi bị dính Captcha như sau:
    Mã (AutoIt):
    Func _Create_NewAccZing_Captcha($fullname, $user, $pass, $ngay_sinh = 1, $thang_sinh = 1, $nam_sinh = 2000, $gioi_tinh = 0)
        Local $apiKey = '92140c0e46c54994812403f564787c14'
        $TokenCaptcha = _HttpRequest(2, 'https://captcha2.zing.vn/captcha2/gettoken?publicKey=' & $apiKey & '&callback=zmCore.js' & Random(111111, 999999, 1)) ;<- con số sau zmCore.js đơn giản chỉ là số random để không bị trùng captcha
        $TokenCaptcha = StringRegExp($TokenCaptcha, '"token":"(.*?)"', 1)
        If @error Then Return SetError(1)
        $TokenCaptcha = $TokenCaptcha[0]

        #Region <Bạn có thể thay đoạn code hiện ảnh và điền captcha dưới đây thành code hiện trên GUI tuỳ bạn>
            InetGet('https://captcha2.zing.vn/captcha2/getcaptcha?publicKey=' & $apiKey & '&token=' & $TokenCaptcha, @DesktopDir & '\captcha.png')
            ShellExecute(@DesktopDir & '\captcha.png')
            $Ma_Captcha = InputBox('Captcha', 'Hãy nhập captcha nhìn thấy:')
        #EndRegion

        Local $sURL = 'https://id.zing.vn/v2/register?apikey=' & $apiKey & '&pid=38&next=https%3A%2F%2Fid.zing.vn%2Fv2%2Finfosetting%3Fapikey%3D' & $apiKey & '%26pid%3D38'
        Local $dataPost = 'apikey=' & $apiKey & '&next=https://id.zing.vn/v2/infosetting?' & $apiKey & '&pid=38&type=regbyacc' & '&fullname=' & _URIEncode($fullname) & '&account=' & _URIEncode($user) & '&pwd=' & _URIEncode($pass) & '&re_pwd=' & _URIEncode($pass) & '&dob=' & $ngay_sinh & '&mob=' & $thang_sinh & '&yob=' & $nam_sinh & '&gender=' & $gioi_tinh & '&token=' & $TokenCaptcha & '&veryfied_code=' & $Ma_Captcha
        Local $_register = _HttpRequest(2, $sURL, $dataPost)
        If @error Or Not $_register Then Return SetError(1, 0, 'Không thể thực hiện đăng ký Tài Khoản mới')
        Select
            Case StringInStr($_register, 'Tên đăng nhập không hợp lệ', 1, 1, 20000)
                Return SetError(2, 0, 'Tên đăng nhập này không hợp lệ. Phải không dấu, 8 ký tự trở lên bao gồm chữ và số')
            Case StringInStr($_register, 'Tên đăng nhập đã tồn tại', 1, 1, 20000)
                Return SetError(3, 0, 'Tên đăng nhập này đã tồn tại')
            Case StringInStr($_register, 'Mật khẩu từ 6 đến 32 ký tự', 1, 1, 20000)
                Return SetError(4, 0, 'Mật khẩu phải từ 6 đến 32 ký tự, không dấu')
            Case StringInStr($_register, 'regcaptcha', 1, 1)
                Return SetError(5, 0, 'Vui lòng đợi 30 phút tiếp theo để tạo Tài Khoản mới')
        EndSelect
        Return SetError(0, 0, 'Đăng ký Tài Khoản Zing mới thành công')
    EndFunc

    Kết hợp với hàm _Create_NewAccZing(...) khi không bị captcha ta được:
    _Create_NewAccZing(...)
    If @error = 5 Then ;có captcha
    _Create_NewAccZing_Captcha(...)​
    Endif
     
  2. Nguyễn Việt Hoàng

    Nguyễn Việt Hoàng Thành viên mới
    • 3/6

    Tham gia ngày:
    5/12/16
    Bài viết:
    3
    Đã được thích:
    3
    @Huân Hoàng Cám ơn bạn nhiều :) Mình cứ nghĩ mỗi lần gửi request thì token thay đổi :p, với mình không để ý đến cái callback=zmCore.js :p

    [​IMG]
     
    kamsamita1 thích bài này.
  3. dechut

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

    Tham gia ngày:
    1/8/16
    Bài viết:
    20
    Đã được thích:
    16
    bài viết quá hay , cảm ơn bác nhiều lắm :D
     
    kamsamita1 thích bài này.
  4. Andy Law

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

    Tham gia ngày:
    14/1/17
    Bài viết:
    6
    Đã được thích:
    6
    mới coi video của bác trên youtube nè, tks bác nhiều nhé, có gì nhờ bác chỉ dạy anh em thêm !
     
    kamsamita1 thích bài này.
  5. Andy Law

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

    Tham gia ngày:
    14/1/17
    Bài viết:
    6
    Đã được thích:
    6
    ủa, mình like rồi mà ta , sao vẫn bị :

    ** Nội dung ẩn: Bạn phải nhấn 'Like' trước khi bạn có thể xem các dữ liệu ẩn chứa ở đây. **
     
    kamsamita1 thích bài này.
  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
    @Andy Law à, cái chức năng đó 4rum bị lỗi rồi bạn, tuy nhiên nếu like rồi thì bạn click vào dòng "** Nội dung ẩn: Bạn phải nhấn 'Like' trước khi bạn có thể xem các dữ liệu ẩn chứa ở đây. **" nó vẫn nhảy đến link tải được =))
     
    kamsamita1 thích bài này.
  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
    Update lần 8 ợ, không biết có lỗi gì hay còn gì cần bổ sung không, nhưng nói chung đến giờ vẫn tạm ổn :p
     
    kamsamita1 thích bài này.
  8. 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
    Phát hiện 1 bug nhảm, lại update =.= :|:|:|
     
    kamsamita1 thích bài này.
  9. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    Bác cho em hỏi, tại sao em get cookies lần 2 lại bị lỗi ạ =.=''
    Mã (AutoIt):

    #include <_HttpRequest.au3>
    $url = 'http://ttvnol.com'
    $url_login = 'http://ttvnol.com/login'
    $uname = ''
    $upass = ''
    $data ='login='&_URIEncode($uname)&'&register=0&password='&_URIEncode($upass)&'&cookie_check=1&_xfToken=&redirect=http%3A%2F%2Fttvnol.com%2F'
    $KQ1 = _HttpRequest(1, $url)
    $sCookie1 = _GetCookie($KQ1)
    $KQ2 = _HttpRequest(1, $url_login,$data, $sCookie1, $url, 'Connection: keep-alive')
    $sCookie2 = _GetCookie($KQ2)
    If @error Then Exit
    $KQ3 = _HttpRequest(2, $url, '', $sCookie2)
    _FileWrite_Test($KQ3)
     
    p/s : tớ tìm ra lỗi rồi , http://ttvnol.com/login là trang đăng nhập, nhưng phải gõ http://ttvnol.com/login/login thì nó mới đăng nhập đc.
     
    kamsamita1 thích bài này.
  10. 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
    @tuoitre

    Đây, đã hoàn thành, lưu ý cái request thứ 1, đây là 1 điểm lạ của cái trang này :v

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $uname = ''
    $upass = ''
    _HttpRequest(1, 'http://ttvnol.com/login/?&_xfRequestUri=%2F&_xfNoRedirect=1&_xfResponseType=json') ;Không biết cái GET này có chức năng gì nhưng phải có nó mới ra được session đúng, không có dòng này thì cái session sai dẫn đến đăng nhập thất bại
    $KQ1 = _HttpRequest(1, 'http://ttvnol.com/login/login', 'login=' & _URIEncode($uname) & '&register=0&password=' & _URIEncode($upass) & '&cookie_check=1&_xfToken=&redirect=http%3A%2F%2Fttvnol.com')
    $sCookie = _GetCookie($KQ1)
    If @error Then Exit MsgBox(4096, 0, 'Fail')
    $KQ2 = _HttpRequest(2, 'http://ttvnol.com/', '', $sCookie)
    _FileWrite_Test($KQ2)
    [​IMG]
     
    kamsamita1 thích bài này.
  11. 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
    @tuoitre éc, refresh lại trang mới thấy thým tìm ra nguyên do rồi =.=
     
    kamsamita1 and tuoitre like this.
  12. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    Bác hướng dẫn em reply với post lên trang này được không ạ :")....
     
    kamsamita1 thích bài này.
  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
    @tuoitre

    Ủa, lấy được Cookie đăng nhập rồi thì mấy việc còn lại là siêu dễ mà.
    Giờ mình ví dụ Reply nhé.

    Đây là mẫu LHH POST để reply trong 1 thread:
    Mã (Text):
    http://ttvnol.com/threads/dang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297/add-reply

    POST /threads/dang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297/add-reply HTTP/1.1
    Host: ttvnol.com
    User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:51.0) Gecko/20100101 Firefox/51.0 Cyberfox/51.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-US
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Ajax-Referer: http://ttvnol.com/threads/dang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297/
    X-Requested-With: XMLHttpRequest
    Referer: http://ttvnol.com/threads/dang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297/
    Content-Length: 1069
    Cookie: Cookie đăng nhập của tôi
    DNT: 1
    Connection: keep-alive

    message_html=abcdef&_xfRelativeResolver=http%3A%2F%2Fttvnol.com%2Fthreads%2Fdang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297%2F&last_date=1156616103&last_known_date=1479547196&_xfToken=654031%2C1484916006%2C76e1abed5cce5ae56ecd3e31095d25373049f2cb&_xfRequestUri=%2Fthreads%2Fdang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297%2F&_xfNoRedirect=1&_xfToken=654031%2C1484916006%2C76e1abed5cce5ae56ecd3e31095d25373049f2cb&_xfResponseType=json
    Từ mẫu trên ta thấy:
    1. URL request là URL của Thread + add-reply
    2. Data2Send ta thấy những thành phần sau:
    • message_html là tin nhắn mình muốn gửi
    • _xfRelativeResolver là url thread đã được encode
    • _xfRequestUri là url thread đã bị bỏ đi cái đầu http://ttvnol.com và được encode
    • last_date, last_known_date, _xfToken thì ở đâu ra nhỉ, có thể đoán thử là lấy nó bằng cách gửi request Referer, với Referer cũng chính là url Thread (nhìn LHH). Trong đó _xfToken được encode.
    OK, hoàn chỉnh Data2Send rồi.

    Sau đây là code Reply hoàn chỉnh, mình viết thành 2 Func gồm 1 hàm Login (lấy Cookie đăng nhập) và 1 hàm Reply:
    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $user = ''
    $pass = ''
    $Thread = 'http://ttvnol.com/threads/dang-ky-thanh-vien-gioi-thieu-va-lam-quen-phong-tiep-khach-chao-mung-thanh-vien-moi-nhat-mai.272297/'
    $message = 'Đăng bài thử nào'

    $Cookie_Login = ttvnol_login($user, $pass)
    ttvnol_reply($Cookie_Login, $Thread, $message)

    Func ttvnol_login($user, $pass)
        _HttpRequest(1, 'http://ttvnol.com/login/?&_xfRequestUri=%2F&_xfNoRedirect=1&_xfResponseType=json')
        $RQ = _HttpRequest(1, 'http://ttvnol.com/login/login', 'login=' & _URIEncode($user) & '&register=0&password=' & _URIEncode($pass) & '&cookie_check=1&_xfToken=&redirect=http%3A%2F%2Fttvnol.com')
        $sCookie = _GetCookie($RQ)
        If @error Then Exit MsgBox(4096, 0, 'Fail')
        Return $sCookie
    EndFunc

    Func ttvnol_reply($Cookie_Login, $Thread, $message)
        $RQ_Referer = _HttpRequest(2, $Thread, '', $Cookie_Login)
        $last_date = StringRegExp($RQ_Referer, '"last_date" value="(.*?)"', 1)[0]
        $last_known_date = StringRegExp($RQ_Referer, '"last_known_date" value="(.*?)"', 1)[0]
        $_xfToken = _URIEncode(StringRegExp($RQ_Referer, '"_xfToken" value="(.*?)"', 1)[0])
        $Data2Send = 'message_html=' & _URIEncode($message) & '&_xfRelativeResolver=' & _URIEncode($Thread) & '&last_date=' & $last_date & '&last_known_date=' & $last_known_date & '&_xfToken=' & $_xfToken & '&_xfRequestUri=' & _URIEncode(StringReplace($Thread, 'http://ttvnol.com', '')) & '&_xfNoRedirect=1&_xfToken=' & $_xfToken & '&_xfResponseType=json'
        _HttpRequest(1, $Thread & 'add-reply', $Data2Send, $Cookie_Login)
    EndFunc
     
    kamsamita1 thích bài này.
  14. tuoitre

    tuoitre Thành viên năng động
    • 28/34

    Tham gia ngày:
    15/9/15
    Bài viết:
    135
    Đã được thích:
    89
    Thì ra mấy cái chữ loằng ngoằng đó bác gọi là encode..em vẫn ngây thơ để mặc định chữ thường vào ạ và cái data2send em làm cũng sai lỗi nhiều :< Cám ơn bác thông não em ạ :">
    Mà bác cho em hỏi, vì sao lại để số 1 ở đoạn này ạ :
    Mã (Text):
    _HttpRequest(1, $Thread & 'add-reply', $Data2Send, $Cookie_Login)
    số 1 là lấy giá trị header về thôi ạ ?
     
    kamsamita1 thích bài này.
  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
    @tuoitre

    Cái dòng cuối:
    _HttpRequest(1, $Thread & 'add-reply', $Data2Send, $Cookie_Login)​
    là để gửi request POST đăng bài, mình không cần lấy bất cứ data trả về (header, body text) gì hết nên để số mấy cũng được (mình để số 1 cho vui thôi chứ để số 0 thì càng tốt, khỏi cần lấy giá trị trả về => thời gian request nhanh hơn :v )
     
    kamsamita1 and tuoitre like this.
  16. essered

    essered Thành viên
    • 18/23

    Tham gia ngày:
    11/9/16
    Bài viết:
    47
    Đã được thích:
    45
    đang vướng capcha ảnh của google.com, tham khảo code capcha baivip của bác mà không ăn thua, bác hướng dẫn giúp
     
    kamsamita1 thích bài này.
  17. enjoyedtvn

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

    Tham gia ngày:
    17/7/16
    Bài viết:
    17
    Đã được thích:
    13
    làm sao để download hình bằng _httprequest vậy các bác?
    ví dụ code dưới đây mình down về nhưng ảnh không xem được :(
    Mã (AutoIt):
    #include <_HttpRequest.au3>

    $pic = _HttpRequest(2,'https://likesplanet.com/captcha.php')
    $picOpen = FileOpen('C:\temp\captcha.jpg', 2 + 16)
    FileWrite($picOpen,$pic)
    FileClose($picOpen)
     
    kamsamita1 thích bài này.
  18. kakanet

    kakanet Thành viên năng động
    • 43/45

    Tham gia ngày:
    24/2/16
    Bài viết:
    203
    Đã được thích:
    211
    code chỉ sai chỗ $pic = _HttpRequest(2.....
    Thay số 2 thành - 2 là được àk
     
    kamsamita1 thích bài này.
  19. enjoyedtvn

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

    Tham gia ngày:
    17/7/16
    Bài viết:
    17
    Đã được thích:
    13
    ok rồi, cảm ơn bác :D tại mình đọc bài ko kĩ
     
    kamsamita1 thích bài này.
  20. Giang Bắc

    Giang Bắc Thành viên mới
    • 1/6

    Tham gia ngày:
    18/3/17
    Bài viết:
    3
    Đã được thích:
    2
    Vừa đăng hỏi trên group nhưng bị xóa bài và band, không hiểu vì sao nhưng thui hỏi trên này cũng được.

    Mình đang cần lấy source đoạn "Bạn chưa có tài khoản" ở tấm hình dưới (Hình 02).
    Nhưng get lệnh này thì chỉ nhận được source của hình trên (Hình 01)
    _HttpRequest(2,'http://vnexpress.net')

    @Huân Hoàng giúp mình được không nhỉ, làm sao để auto hiểu được là nhấn nút "Đăng nhập" (hoặc hình avatar ở gốc), sau đó lấy source của trang khi khung đó hiện ra.

    thank trước ^^



    [​IMG]


    Hình 01

    [​IMG]

    Hình 02​
     
    kamsamita1 thích bài này.

Chia sẻ trang này

Đang tải...