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
    Chắc lúc sửa UDF lỡ tay nhấn trúng nút gì mà không biết, để làm thêm vài thứ nữa rồi update lên 14.0.3 luôn 1 thể :v
     
  2. hoanglee

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

    Tham gia ngày:
    23/10/18
    Bài viết:
    2
    Đã được thích:
    0
    Bác @Huân Hoàng cho e hỏi _HttpRequest(2,'') với _HttpRequest('_2','') thì cái này trả về nhanh hơn ạ?
     
  3. 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
    anh em cho mình hỏi. Mình thử làm trên trang aliexpress nhưng kết quả nó không giống như mình xem bình thường. giúp mình với
    [​IMG]
     
  4. 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
    Mode '_2' phải qua thêm một bước xử lý html bằng HTMLFile Object nên sẽ chậm hơn tầm 10ms, mà nhiêu đó thì hoàn toàn không đáng kể nên có thể coi 2 mode nhanh như nhau. Mode '_2' cũng ít khi xài đến vì nó chỉ trả về toàn text và lọc sạch html element nên chỉ hữu dụng trong 1 số trường hợp cần đến.
     
  5. 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ứ nhất: Một phần dữ liệu không nằm trực tiếp trong source html https://www.aliexpress.com/ mà nó load dần từ trang https://flashdeals.aliexpress.com/en.htm bởi js.
    [​IMG]
    Thứ hai: Thým request về là chỉ lấy source HTML của trang, còn Browser nó còn phải tải về js, image, ... và quan trọng là css định hình cấu trúc trang → trừ phi css nó nằm ngay trong source HTML còn css nằm trong link thì hẳn nhiên test hiển thị phải khác.

    Thým có thể test 2 request sau: (Mode + yêu cầu _HttpRequest ver13 trở lên)
    Mã (AutoIt):
    $rq = _HttpRequest( '+2', 'https://www.aliexpress.com/')
    _HttpRequest_Test($rq)

    Mã (AutoIt):
    $rq = _HttpRequest('+2', 'https://flashdeals.aliexpress.com/en.htm')
    _HttpRequest_Test($rq)
    để thấy một số hiệu quả nhất định so với mode 2 thông thường.

    Còn mục tiêu của thým đối với trang này là gì thì phải xem request bắt được từ F12/Live HTTP Headers... cụ thể là gì, chứ giờ thým có ViewSource (Ctrl+U) trên Browser thì cũng chỉ ra kết quả như thým request về thôi :v
     
  6. sgdavid

    sgdavid Thành viên
    • 8/11

    Tham gia ngày:
    23/10/15
    Bài viết:
    28
    Đã được thích:
    12
    A huanhoang xem hộ e cái này với, e định order trang này mà cái post của nó không có DataToSend
    Thanks a
    [​IMG]

    Vào cái mua hàng, mình xác nhận sdt trước trong phần thông tin tài khoản thì nó không bắt check otp nữa a à.
    A cứ thử request thoải mái xong mình hủy đơn hàng a ạ
     
  7. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    Mấy anh/ chị cho em hỏi.
    VD em có link "https://vipfb.es/". Khi request đến sẽ có đc 1 captcha. Nhưng kiểu như captcha chỉ request đc 1 lần thì làm sao để tải ảnh đó về mình giải tay đc ạ.
     
  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
    Ví dụ làm Login to Vipfb thì ta có trình tự cụ thể như thế này:
    - Điền Captcha + Token + Ấn Submit→ Ta sẽ bắt được request như sau:

    [​IMG]

    - Trong hình 123123 là token iêm điền đại vào, vậy ta có 2 thứ cần tìm là: Giá trị của Captcha và chuỗi lạ f9ae9e642c1e66 (luôn thay đổi). Thì hẳn nhiên như từ trước tới nay, tìm giá trị lạ thì request tới Referer để xem HTML hoặc ViewSource (Ctrl+U) ngay trên trình duyệt cái địa chỉ Referer luôn cho lẹ, thì thấy:

    [​IMG]

    - Vậy là 2 thứ cần tìm rõ mồn một rồi, ta sẽ StringRegExp để tách lấy chúng và POST thôi :v

    - Code mẫu:

    Mã (AutoIt):
    #include <_HttpRequest.au3>

    $Token = '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'

    $rq1 = _HttpRequest(2, 'https://vipfb.es')

    $CaptchaURL = StringRegExp($rq1, 'src="(/_CAPTCHA.php.*?)"', 1)[0]
    $CaptchaData = _HttpRequest(3, 'https://vipfb.es/' & $CaptchaURL) ;Regexp trên chưa có Host → nối HOST vào
    $Captcha = _HttpRequest_SimpleCaptchaGUI($CaptchaData) ; Hàm này yêu cầu _HttpRequest ver14, nếu không thích hiện kiểu này thì có thể nhúng GUI tuỳ thým

    $wToken = StringRegExp($rq1, 'id="wtoken".*? name="(.*?)"', 1)[0]

    $rq2 = _HttpRequest(2, 'https://vipfb.es/', 'cpth=' & $Captcha & '&' & $wToken & '=' & $Token & '&plogin=')
    _HttpRequest_Test($rq2)
     
     
    #Rainy# Hoàng Vũ IT thích bài này.
  9. 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âu hỏi này khá khó nhằn khi có rất hàng trăm request xuất hiện, nhưng cứ lưu ý các request POST trước rồi sàng lọc dần mấy cái khác, khi đã có kinh nghiệm rq thì sẽ sàng được đống rq cần thiết sau:
    https://www.sendo.vn/mieng-lot-so-sinh-huggies-newborn-2-goi-40-mieng-12567895.html

    GET /mieng-lot-so-sinh-huggies-newborn-2-goi-40-mieng-12567895.html HTTP/1.1
    Host: www.sendo.vn
    Accept-Encoding: gzip, deflate, br
    Cookie: newWebPush=true; SSID=e7u4gae0guiekkb8ud0cad8oa0; tracking_id=640804941; browserid=75c524341eff5e44a41a481e10305bc8;
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1

    ----------------------------------------------------------
    https://www.sendo.vn/m/wap_v2/cart/add

    POST /m/wap_v2/cart/add HTTP/1.1
    Host: www.sendo.vn
    x-requested-with: XMLHttpRequest
    Authorization:
    Content-Type: application/json
    platform: web
    Origin: https://www.sendo.vn
    Referer: https://www.sendo.vn/mieng-lot-so-sinh-huggies-newborn-2-goi-40-mieng-12567895.html
    Content-Length: 89
    Cookie: newWebPush=true; SSID=e7u4gae0guiekkb8ud0cad8oa0; tracking_id=640804941; browserid=75c524341eff5e44a41a481e10305bc8;
    DNT: 1
    Connection: keep-alive
    {"shop_id":410166,"product_id":12567895,"qty":1,"options":{},"buynow":1,"source_info":""}

    ----------------------------------------------------------
    https://www.sendo.vn/checkout/onepa...d813e2911580f25a9f7e/?sendo_platform=desktop2

    GET /checkout/onepage/shop/410166/product/12567895/action/buynow/hash/7f763b898cccd813e2911580f25a9f7e/?sendo_platform=desktop2 HTTP/1.1
    Host: www.sendo.vn
    Accept-Encoding: gzip, deflate, br
    Referer: https://www.sendo.vn/mieng-lot-so-sinh-huggies-newborn-2-goi-40-mieng-12567895.html?source_info=
    Cookie: newWebPush=true; SSID=e7u4gae0guiekkb8ud0cad8oa0; tracking_id=640804941; browserid=75c524341eff5e44a41a481e10305bc8;
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1

    ----------------------------------------------------------
    https://www.sendo.vn/checkout/onepage/saveShipping/

    POST /checkout/onepage/saveShipping/ HTTP/1.1
    Host: www.sendo.vn
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    x-requested-with: XMLHttpRequest
    Referer: https://www.sendo.vn/checkout/onepa...d813e2911580f25a9f7e/?sendo_platform=desktop2
    Content-Length: 47
    Cookie: newWebPush=true; SSID=e7u4gae0guiekkb8ud0cad8oa0; tracking_id=640804941; browserid=75c524341eff5e44a41a481e10305bc8;
    DNT: 1
    Connection: keep-alive
    address_id=12666882&action=set_shipping_address

    ----------------------------------------------------------
    https://www.sendo.vn/checkout/onepage/saveOrder/

    POST /checkout/onepage/saveOrder/ HTTP/1.1
    Host: www.sendo.vn
    Referer: https://www.sendo.vn/checkout/onepa...d813e2911580f25a9f7e/?sendo_platform=desktop2
    Cookie: newWebPush=true; SSID=e7u4gae0guiekkb8ud0cad8oa0; tracking_id=640804941; browserid=75c524341eff5e44a41a481e10305bc8;
    DNT: 1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 41
    customer_otp=&customer_grand_total=162000
    Copy đống HTTP Headers trên ra notepad cho tiện theo dõi.

    - Ta thấy lọt vào 2 request GET trong đống POST, đơn giản là vì trong data2send của các POST có những giá trị cần tìm, mà cái cần tìm thì request GET từ Referer như bao đời nay vẫn làm :v Nếu thắc mắc vì sao chọn ra được 3 POST trong rất nhiều POST xuất hiện thì là do iêm đã lượt bỏ dần trong quá trình làm rq.

    - Các bước:

    A/ Request đăng nhập: Đơn giản.

    B/ GET địa chỉ sản phẩm, ví dụ: sendo.vn/mieng-lot-so-sinh-huggies-newborn-2-goi-40-mieng-12567895.html để tách lấy shop_id product_id cho POST kế. Tuy nhiên ta thấy POST addCart có tham số "options":{} rất khó chịu, nếu mặt hàng muốn mua không có lựa chọn (màu sắc, kích cỡ - thường là các loại quần áo) thì đơn giản rồi vì nó rỗng, nhưng nếu có lựa chọn thì options này sẽ có giá trị, ví dụ:
    "options":{"10696823_1500":["10696823_25194"],"10696823_284":["10696823_604"]}
    "options":{"12947975_284":["12947975_605"]}​
    và các giá trị này không nằm trong source HTML GET ở trên (chắc là nằm trong js) với quy luật: product_id_mãsốmàu (284, đoán thế), product_id_mãsốkíchcỡ (1500) , còn 604, 605, 606... có vẻ là 600 + thứ tự chọn màu. Nói chung iêm chưa tìm ra quy luật, thým có thể request thử thật nhiều sản phẩm để tìm ra quy luật cuối cùng của nó.

    C/ 2 POST kế data2send có các giá trị phải tìm là: address_id, customer_grand_total (tổng tiền mua sản phẩm), tìm ở đâu thì nhìn cái Referer, và thế là ta có cái GET thứ 2: https://www.sendo.vn/checkout/onepage/shop/410166/product/12567895/action/buynow/hash/hash_id, trong đó hash_id là giá trị có được khi rq addCart ở bước B thành công.

    D/ Request kế https://www.sendo.vn/checkout/onepage/saveShipping/ (Chọn địa chỉ giao nhận , phương thức thanh toán...) khá rối rắm, có 3 phương án khi iêm test request:
    1. Bỏ qua request POST này luôn, khi đó sendo.vn tự động chọn địa chỉ giao nhận là thông tin mình đã đăng ký trong cài đặt tài khoản.
    2. Sử dụng địa chỉ giao nhận cuối cùng đã được lưu (ở lần đặt hàng trước): Khi đó data2send là address_id={id lấy từ request GET bước 3}&action=set_shipping_address
    3. Set địa chỉ mới hoàn toàn, cái này phải tìm hiểu thêm về các mã số tỉnh. huyện, phường, quận...tùm lum hết (đã có ghi chú trong code dưới) nên thôi bỏ qua cho đỡ nhức đầu.
    Trước khi qua bước 5, iêm xin nhắc là hãy đọc kỹ Live HTTP Headers và sẽ thấy các request có header đặc biệt x-requested-with: XMLHttpRequest, phải thêm vào không thì request thất bại.

    E/ POST https://www.sendo.vn/checkout/onepage/saveOrder , customer_grand_total đã tìm ở GET bước C rồi. Đặc biệt request này lại không có header x-requested-with: XMLHttpRequest như mấy thằng trên, thêm vào là chạy sai =))

    OK, vậy là xong và thưởng thức thành quả :v

    [​IMG]

    - Code (Nên tự làm thử trước với các bước iêm đã nêu để tăng kinh nghiệm rq, bí quá rồi mới xem code :v )
    Mã (AutoIt):
    #include <_HttpRequest.au3>
    $User = ''
    $Password = ''

    $DiachiMatHang = 'https://www.sendo.vn/sua-tam-ca-ngua-11664643.html'
    $SoLuong = 1
    $Options = '' ;Khai báo khi sản phẩm có lựa chọn Màu sắc, kích cỡ: Thằng này phải tra thật nhiều sản phẩm mới tìm ra được quy luật

    $rq1 = _HttpRequest(2, 'https://www.sendo.vn/general/login/login/', 'username=' & _URIEncode($User) & '&password=' & $Password)
    MsgBox(4096, 'Thông tin tài khoản', $rq1)

    $rq2 = _HttpRequest(2, $DiachiMatHang, '', '', '', 'x-requested-with: XMLHttpRequest')
    $product_id = StringRegExp($rq2, '"product_id":(\d+)', 1)
    $shop_id = StringRegExp($rq2, '"shop_id":(\d+)', 1)

    $rq3 = _HttpRequest(2, 'https://www.sendo.vn/m/wap_v2/cart/add', '{"shop_id":' & $shop_id[0] & ',"product_id":' & $product_id[0] & ',"qty":' & $SoLuong & ',"options":{' & $Options & '},"buynow":1,"source_info":""}', '', '', 'x-requested-with: XMLHttpRequest')
    $hash = StringRegExp($rq3, '"hash":"(.*?)"', 1)

    $rq4 = _HttpRequest(2, 'https://www.sendo.vn/checkout/onepage/shop/' & $shop_id[0] & '/product/' & $product_id[0] & '/action/buynow/hash/' & $hash[0] & '/?sendo_platform=desktop2', '', '', '', 'x-requested-with: XMLHttpRequest')
    $TongThanhTien = StringRegExp($rq4, 'var total_revenue\h*?=\h*?(\d+)', 1)
    _HttpRequest_Test($rq4)

    #cs Sử dụng địa chỉ giao nhận cuối cùng đã được lưu (ở các lần đặt hàng trước)
        $shipping_address_id = StringRegExp($rq4, '"shipping_address_id" value="(.*?)"', 1)
        $rq5 = _HttpRequest(2, 'https://www.sendo.vn/checkout/onepage/saveShipping/', 'address_id=' & $shipping_address_id[0] & '&action=set_shipping_address', '', '', 'x-requested-with: XMLHttpRequest')
    #ce


    #cs hoặc set địa chỉ mới, cái này phải tìm hiểu thêm về các mã số tỉnh. huyện, phường, quận...tùm lum hết
        $rq1 = _HTMLDecode($rq1)
        Local $aMyInfo = ['phone', 'firstname', 'lastname', 'fullname', 'fpt_id']
        For $i = 0 To 4
        $regexpInfo = StringRegExp($rq1, '"' & $aMyInfo[$i] & '":"(.*?)"', 1)
        If @error Then Exit
        $aMyInfo[$i] = $regexpInfo[0]
        Next
        _ArrayDisplay($aMyInfo)
        $rq5 = _HttpRequest(2, 'https://www.sendo.vn/checkout/onepage/saveShipping/', _Data2SendEncode('name=' & $aMyInfo[3] & '&firstname=+' & $aMyInfo[1] & '&lastname=' & $aMyInfo[2] & '&phone=' & $aMyInfo[0] & '&district=1-1&shipping[region_id_h]=1&region=1&shipping[district_id_h]=1&locality=1&latlong=&ward=26761&shipping[ward]=Phường+Cầu+Kho&shipping[ward_show]=Phường+Cầu+Kho&street-address=123&shipping[save_in_address_book]=0&action=set_shipping_address_new'), '', '', 'x-requested-with: XMLHttpRequest')
    #ce


    $rq6 = _HttpRequest(2, 'https://www.sendo.vn/checkout/onepage/saveOrder/', 'customer_otp=&customer_grand_total=' & $TongThanhTien[0])
    _HttpRequest_Test($rq6)
     
     
    Tungtata and sgdavid like this.
  10. sgdavid

    sgdavid Thành viên
    • 8/11

    Tham gia ngày:
    23/10/15
    Bài viết:
    28
    Đã được thích:
    12
    Vâng e tự làm thử theo các bước a dạy
    Thanks a nhìu
     
  11. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    [​IMG]
    Chào a Huân, em đang mày mò vài cái post nhưng làm mãi k đc, em thấy như trang "https://ocr.space/ocrapi" (phần cURL) k có cần phải $file nên em để nguyên. pram 'apikey=4944b58aa188957&isOverlayRequired=False&file=' & "@2.jpg" & '&language=eng' nhưng k biết do sao mà không được. còn base64 của em thì báo lỗi không đúng định dạng file. mong a giúp
     
  12. 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
    @vucapuchinp:

    Mỗi ngôn ngữ lập trình đều có rất nhiều thư viện hỗ trợ Http Request, không cái nào giống cái nào về cách gọi hàm/lệnh/Object cả, cốt yếu là thým phải hiểu cách thức request thì chuyển sang xài thư viện/ngôn ngữ nào cũng chơi được hết :v

    Giờ đi vào câu hỏi của thým, cái API của trang này khá đơn giản, iêm nghĩ thým làm không ra là do thým chưa hiểu cách gọi lệnh của cURL thôi.

    [​IMG]

    - Giờ iêm giả sử iêm chưa biết cú pháp của cURL vận hành thế nào, thế là mò trên mạng và có được 1 chút ít kiến thức về cURL như sau:
    • Lệnh (cmdline) -H : Add Request Header
    • Lệnh (cmdline) --data hoặc --data-urlencode: POST data ở dạng application/x-www-form-urlencoded
    • Lệnh (cmdline) --form : POST data ở dạng Multipart/form-data. Thým làm không ra là do thằng này đấy. POST dạng này thì iêm có hơn chục ví dụ trong file Help rồi, iêm thấy thým nói liên quan $file thì chắc thým cũng biết xài dạng này, nhưng mà câu tiếp theo trong câu hỏi thì iêm thấy thým lại đi chơi dạng application/x-www-form-urlencoded nên mới không ra đó :v
    - Ta thấy có 3 cách để OCR ảnh từ api trang này là:

    A/ OCR ảnh trên mạng
    - URL request: "https://api.ocr.space/Parse/Image"
    - Request Header: "apikey:helloworld"

    - POST dạng application/x-www-form-urlencoded (--data) với data là "isOverlayRequired=true&url=http://i.imgur.com/fwxooMv.png&language=eng"

    [​IMG]
    B/ OCR ảnh từ máy tính ở dạng file
    - URL request: "https://api.ocr.space/Parse/Image"
    - Request Header: "apikey:helloworld"
    - POST dạng multipart/form-data như đã nói ở trên (--form). Mà POST dạng này thì iêm nghĩ thým biết rồi nên không nói dài dòng nữa, ta sẽ có DataPOST như sau:
    Local $MultipartFormData = ["$file=Đường_dẫn_ảnh\screenshot.jpg", "language=eng", "isOverlayRequired=true"]​
    cURL nó trình bày khai báo tập tin theo kiểu Key=@đường_dẫn_ảnh thì kệ nó, mỗi UDF/thư viện đều có cú pháp khác nhau, đối với _HttpRequest thì FormData phải khai báo đường dẫn tập tin theo kiểu $Key=Đường_dẫn_ảnh (iêm sẽ cân nhắc ở phiên bản _HttpRequest kế sẽ cho thêm khai báo kiểu @ này, muốn xài kiểu nào cũng được cho đỡ loạn :v )
    [​IMG]


    C/ OCR ảnh từ máy tính ở dạng Base64
    - URL request: "https://api.ocr.space/Parse/Image"
    - Request Header: "apikey:helloworld"
    - POST dạng multipart/form-data như đã nói ở trên (--form). Cách C này không phải là khai báo đường dẫn tập tin nên base64Image sẽ không có dấu $ như OCR cách B nhé. Để có được dữ liệu ảnh ở dạng Base64 thì ta sử dụng hàm _B64Encode có sẵn của UDF để làm (Chú ý dữ liệu đầu vào của hàm _B64Encode phải là kiểu Binary)
    Mã (AutoIt):
    $hFile = FileOpen("I:\Desktop\screenshot.jpg", 16) ;Đọc dữ liệu dạng Binary
    $base64Image = _B64Encode(FileRead($hFile))
    FileClose($hFile)
    Local $MultipartFormData = ["base64Image=data:image/jpeg;base64," & $base64Image, "language=eng", "isOverlayRequired=true"]
    [​IMG]
    Vậy là iêm đã hướng dẫn xong cách chuyển đổi cURL sang _HttpRequest rồi đấy, rất đơn giản phải không nào. Chúc thým học request vui :p​
     
  13. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    Cảm ơn thím Huân đã khai sáng. Thì ra là do iêm hiểu sai cấu trúc của cURL. một lần nữa thank bác.
     
  14. 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
    Tui cũng đang làm trang này và rq trả về như trên. Có bro nào giúp đỡ với, xin cảm ơn.
     
  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
    - Trang này làm cũng bình thường thôi mà nhể, chỉ cần chú ý 2 điểm:
    • Khi POST Login thì cần tham số _csrfToken, khi POST đến URL /tools/mass-shrinker để tạo nhiều link rút gọn cùng lúc cũng cần tham số _csrfToken 2 cái _csrfToken này là khác nhau → phải regex lại _csrfToken mới chứ đừng quăng _csrfToken khi rq login vào rq mass-shrinker sẽ sai.
    • Khi POST /tools/mass-shrinker thì cần tham số _Token[fields] → Tìm tham số này bằng cách request đến Referer → Ta thấy trong source Html request được có đến 2 cái _Token[fields] → So sánh với Live HTTP Headers thì ta luôn phải lấy cái thứ 2 mới request thành công → StringRegExp phải để mode 3, chứ ẩu ẩu StringRegExp để mode 1 thì nó chỉ lấy đến _Token[fields] thứ 1 là dừng regex thì dùng nó để POST cũng sai nốt =))
    - Code: Code này iêm dùng hàm _HttpRequest_SearchHiddenValues (sử dụng _HttpRequest ver mới nhất, ver cũ hàm này hình như trả kết quả không chính xác) để lấy các giá trị _csrfToken, _Token[fields] và _Token[unlocked] cho nó gọn thay vì dùng StringRegExp:
    Mã (AutoIt):
    #include <_HttpRequest.au3>

    $sURLs = 'http://abc1.com|https://abc2.net'

    $username = ''
    $Password = ''

    $tHidden = _HttpRequest_SearchHiddenValues('https://raolink.com/auth/signin')
    MsgBox(4096, 'Test',  $tHidden('all_string'))
    _HttpRequest(1, 'https://raolink.com/auth/signin', $tHidden('all_string') & '&username=' & _URIEncode($username) & '&password=' & $Password)

    $tHidden = _HttpRequest_SearchHiddenValues('https://raolink.com/member/tools/mass-shrinker')
    $arr = $tHidden('all_array') ;Test, dòng này có thể bỏ
    _ArrayDisplay($arr, 'Test')

    $sData = '_method=POST&_csrfToken=' & $tHidden('_csrfToken') & '&urls=' & _URIEncode(StringReplace($sURLs, '|', @CRLF)) & '&ad_type=0&_Token%5Bfields%5D=' & $tHidden('_Token[fields].1') & '&_Token%5Bunlocked%5D=' & $tHidden('_Token[unlocked]') ;Vì xuất hiện 2 Key Hidden cùng tên là _Token[fields] và cần lấy giá trị cái thứ 2 nên ta lấy giá trị _Token[fields].1 (bắt đầu bằng .0 như array)

    $rq = _HttpRequest(2, 'https://raolink.com/member/tools/mass-shrinker', $sData)
    _HttpRequest_Test($rq)
     
    [​IMG]

    Kết quả chạy _HttpRequest_Test đôi khi xoay hơi lâu, chờ tí là hiện kết quả ra (chắc do nó load link gì đấy), còn thực tế source HTML trả về đã có link rút gọn rồi, cứ StringRegExp lấy chúng ra là được.
     
    Anh Gấu and Only Love like this.
  16. Anh Gấu

    Anh Gấu Thành viên mới
    • 1/6

    Tham gia ngày:
    27/12/18
    Bài viết:
    6
    Đã được thích:
    0
    Các bác giúp em tìm cái token trang này với https://id.muaban.net/
    Em tìm mãi mà 0 ra mới cay chứ
    Em đội ơn các bác
    [​IMG]

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    ;---------------------------Trang DN---------------------------------------------//--------------------------------------------------------------------//---------
       chay('email','pass',"https://muaban.net",'https://muaban.net/account/signin')
    ;-------------------------------------------//------------------------------------------------------------------------------------------------------------------

    Func chay($namec, $passc,$link_TenTrangc, $link_Dnc)
    #Region <Dang nhap>
    $name = $namec
    $pass =$passc
    $link_TenTrang=$link_TenTrangc
    $link_Dn=$link_Dnc

    $rq_header = _HttpRequest(1,$link_Dn )
    $Cookie1=_GetCookie($rq_header)
    ;MsgBox(0,"cokie",$Cookie1)
    $rq_referer = _HttpRequest(2, $link_Dn)
    ;ClipPut($rq_referer)
    $__RequestVerificationToken = StringRegExp($rq_referer, 'RequestVerificationToken" type="hidden" value="(.*?)" />', 1)[0]
    ;ClipPut($token)
    ;MsgBox(0,"token",$token)
    $sid = StringRegExp($rq_referer, 'name="sid" type="hidden" value="(.*?)" />', 1)[0]
    $rq_referer1 = _HttpRequest(2, 'https://id.muaban.net/?app=muabannet&services=mbnv2&provider=&sid=' & $sid & '&mode=0&returnUrl=https%3A%2F%2Fmuaban.net%2F&callbackUrl=muaban.net%2Ftrang-ca-nhan%2FSignInCallback')
    ;ClipPut($rq_referer1)
    ;;--------------------------------------------------Mong cac Bac giup do---------------------------------------------------------------------------
    ;;1. van de khong tim ra cai $token
    ;;2.cai $token va $__RequestVerificationToken la khac nhau ve do dai
    $datasen='{"model":{"UserName":"' & $name & '","Password":"' & $pass & '","Token":"' & '---can tim -----' & '","sid":"' & $sid & '","mode":"0","AppName":"muabannet","Services":"mbnv2","returnUrl":"https://muaban.net/","callbackUrl":"https://muaban.net/trang-ca-nhan/SignInCallback"}}'
    ;---------------------------------------------------------------------------------------//-------------------------------------------------------
    $rq = _HttpRequest(2, $link_Dn,$datasen,'','','X-DevTools-Emulate-Network-Conditions-Client-Id: 4b60f0f3-a0d6-426c-9b84-62c4785c5601|X-Requested-With: XMLHttpRequest');

    ;MsgBox(0,0,$rq)
    #EndRegion

    EndFunc
     
    Chỉnh sửa cuối: 12/9/21
  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
    chuỗi 03A.... : recaptcha, sử dụng hàm _IE_RecaptchaBox trong udf của bác Huân mà chiến, nhác click tay thì mua api decaptcha
     
    Anh Gấu thích bài này.
  18. Anh Gấu

    Anh Gấu Thành viên mới
    • 1/6

    Tham gia ngày:
    27/12/18
    Bài viết:
    6
    Đã được thích:
    0
    Cái này lúc có capcha lúc không bác ạ
    Em đăng lâu lâu mới hiện capcha
    Bác có cách nào tìm cái token dùm em với
    Em ngồi 4 ngày rồi tim hết từng file mà 0 thấy cái token nó nằm ở đâu cả
     
  19. longtu

    longtu Thành viên
    • 18/23

    Tham gia ngày:
    9/8/17
    Bài viết:
    67
    Đã được thích:
    37
    recaptcha có dạng hiện và ẩn. dạng ẩn bác k thấy nhưng thực ra nó vẫn random 1 chuỗi recaptcha-response ngầm mà k cần phải click ảnh https://developers.google.com/recaptcha/docs/invisible. bác xem ở dưới góc phải trang đăng nhập là thấy cái bảng "được bảo vệ bằng reCAPTCHA" đó

    [​IMG]
     
    Anh Gấu thích bài này.
  20. Anh Gấu

    Anh Gấu Thành viên mới
    • 1/6

    Tham gia ngày:
    27/12/18
    Bài viết:
    6
    Đã được thích:
    0
    Các bác giúp em đăng nhập trang https://id.muaban.net với . Hôm qua bác @longtu chỉ em về captcha rồi .
    Em thêm hoàn chỉnh vào datasen mà sao 0 thấy đăng nhập được ta .

    Mã (AutoIt):
    #include <_HttpRequest.au3>
    ;---------------------------Trang DN---------------------------------------------//--------------------------------------------------------------------//---------
       chay('email','pass',"https://muaban.net/",'https://muaban.net/account/signin')
    ;-------------------------------------------//------------------------------------------------------------------------------------------------------------------

    Func chay($namec, $passc,$link_TenTrangc, $link_Dnc)
    #Region <Dang nhap>
    $name = $namec
    $pass =$passc
    $link_TenTrang=$link_TenTrangc
    $link_Dn=$link_Dnc

    $rq_header = _HttpRequest(1,$link_Dn )
    $Cookie1=_GetCookie($rq_header)
    ;MsgBox(0,"cokie",$Cookie1)
    $rq_referer = _HttpRequest(2, $link_Dn)
    ;ClipPut($rq_referer)
    $__RequestVerificationToken = StringRegExp($rq_referer, 'RequestVerificationToken" type="hidden" value="(.*?)" />', 1)[0]
    ;ClipPut($token)
    ;MsgBox(0,"token",$token)
    $sid = StringRegExp($rq_referer, 'name="sid" type="hidden" value="(.*?)" />', 1)[0]
    $rq_referer1 = _HttpRequest(2, 'https://id.muaban.net/?app=muabannet&services=mbnv2&provider=&sid=' & $sid & '&mode=0&returnUrl=https%3A%2F%2Fmuaban.net%2F&callbackUrl=muaban.net%2Ftrang-ca-nhan%2FSignInCallback')
    ;ClipPut($rq_referer1)
    $recaptcha_token = _IE_RecaptchaBox($link_Dn)
    ;MsgBox(0,"",$recaptcha_token)
    ;ClipPut($recaptcha_token)

    $datasen='{"model":{"UserName":"' & $name & '","Password":"' & $pass & '","Token":"' & $recaptcha_token & '","sid":"' & $sid & '","mode":"0","AppName":"muabannet","Services":"mbnv2","returnUrl":"https://muaban.net/","callbackUrl":"https://muaban.net/trang-ca-nhan/SignInCallback"}}'
    ;---------------------------------------------------------------------------------------//-------------------------------------------------------
    $rq = _HttpRequest(2, 'https://id.muaban.net/?app=muabannet&services=mbnv2&provider=&sid=' & $sid & '&mode=0&returnUrl=https%3A%2F%2Fmuaban.net%2F&callbackUrl=muaban.net%2Ftrang-ca-nhan%2FSignInCallback',$datasen);,'','','X-DevTools-Emulate-Network-Conditions-Client-Id: 4b60f0f3-a0d6-426c-9b84-62c4785c5601|X-Requested-With: XMLHttpRequest');

    $rq_TRANGCHINH = _HttpRequest(2, $link_TenTrang)
    ;MsgBox(0,0,$rq_TRANGCHINH)
    ;ClipPut($rq_TRANGCHINH)
    #EndRegion

    EndFunc
     
    Em cám ơn các Bác nhiều
     
    Chỉnh sửa cuối: 12/9/21

Chia sẻ trang này

Đang tải...