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.13 - 11/11/2017] HttpRequest cho người mới bắt đầu - Ví dụ, hình ảnh, các 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. duc

    duc Thành viên
    • 8/11

    Tham gia ngày:
    28/2/16
    Bài viết:
    38
    Đã được thích:
    17
    @Huân Hoàng :D kaka hơi khó hiểu :D thím làm 1 code dễ dễ hiểu ý :D
     
  2. Nguyễn Việt Hoàng

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

    Tham gia ngày:
    5/12/16
    Bài viết:
    3
    Đã được thích:
    0
    @Huân Hoàng mình có viết một tool để auto reg Nick Zing nhưng phải chiếm chuột với bàn phím. Giờ mình muốn nó auto ẩn thôi, kiểu tự gửi thông tin đến Zing để đăng kí, nếu có captcha thì báo về để mình nhập. Vậy mình có thể dùng code như thế nào nhỉ? Nếu có thời gian bạn có thể code mẫu cho mình phần gửi thông tin được không? Cám ơn bạn nhiều :)
     
  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:
    494
    Đã được thích:
    736
    Đăng ký acc Zing dễ lắm, đọc xong phần 2 của bài hướng dẫn là có thể tự làm được rồi mà :D Mình trích cái code đăng ký Zing từ 1 chương trình của mình để bạn tham khảo, chưa bao gồm tình huống hiện captcha khi thực hiện đăng ký nhiều lần, bạn có thể tìm hiểu thêm để hoàn thiện code bạn cần: ;)

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $test = _Create_NewAccZing('HuanHoang', 'huan101hoang102', 'huanhoang')
    MsgBox(4096, @error, $test)


    Func _Create_NewAccZing($fullname, $user, $pass, $ngay_sinh = 1, $thang_sinh = 1, $nam_sinh = 2000, $gioi_tinh = 0)
        Local $Host = 'https://id.zing.vn/v2'
        Local $apiKey = 'apikey=92140c0e46c54994812403f564787c14'
        Local $sURL = $Host & '/register?' & $apiKey & '&pid=38&next=' & $Host & '/infosetting?' & $apiKey & '&pid=38'
        Local $dataPost = $apiKey & '&next=' & $Host & '/infosetting?' & $apiKey & '&pid=38&type=regbyacc' & '&fullname=' & _URIEncode($fullname) & '&account=' & _URIEncode($user) & '&pwd=' & _URIEncode($pass) & '&re_pwd=' & $pass & '&dob=' & $ngay_sinh & '&mob=' & $thang_sinh & '&yob=' & $nam_sinh & '&gender=' & $gioi_tinh
        Local $_register = _HttpRequest(2, $sURL, $dataPost, _HttpRequest(-1, $sURL))
        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
     
    Nguyễn Việt Hoàng thích bài này.
  4. Nguyễn Việt Hoàng

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

    Tham gia ngày:
    5/12/16
    Bài viết:
    3
    Đã được thích:
    0
    @Huân Hoàng Cám ơn bạn:), cho mình hỏi thêm cái vụ hiện captcha thì dùng hàm như thế nào để lấy token cho phù hợp vậy vì token random, với lại dùng LHH thì thấy có 2 token lận :p

    [​IMG]

    Thanks :)
     
  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:
    494
    Đã được thích:
    736
    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
     
    Nguyễn Việt Hoàng thích bài này.
  6. Nguyễn Việt Hoàng

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

    Tham gia ngày:
    5/12/16
    Bài viết:
    3
    Đã được thích:
    0
    @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]
     
  7. dechut

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

    Tham gia ngày:
    1/8/16
    Bài viết:
    8
    Đã được thích:
    4
    bài viết quá hay , cảm ơn bác nhiều lắm :D
     
  8. 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:
    0
    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 !
     
  9. 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:
    0
    ủ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. **
     
  10. 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:
    494
    Đã được thích:
    736
    @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 =))
     
  11. 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:
    494
    Đã được thích:
    736
    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
     
  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:
    494
    Đã được thích:
    736
    Phát hiện 1 bug nhảm, lại update =.= :|:|:|
     
  13. tuoitre

    tuoitre Thành viên
    • 18/23

    Tham gia ngày:
    15/9/15
    Bài viết:
    109
    Đã được thích:
    22
    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.
     
  14. 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:
    494
    Đã được thích:
    736
    @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]
     
  15. 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:
    494
    Đã được thích:
    736
    @tuoitre éc, refresh lại trang mới thấy thým tìm ra nguyên do rồi =.=
     
    tuoitre thích bài này.
  16. tuoitre

    tuoitre Thành viên
    • 18/23

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

    tuoitre Thành viên
    • 18/23

    Tham gia ngày:
    15/9/15
    Bài viết:
    109
    Đã được thích:
    22
    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 ạ ?
     
  19. 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:
    494
    Đã được thích:
    736
    @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 )
     
    tuoitre thích bài này.
  20. essered

    essered Thành viên
    • 8/11

    Tham gia ngày:
    11/9/16
    Bài viết:
    41
    Đã được thích:
    14
    đ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
     

Chia sẻ trang này

Đang tải...