Huân Hoàng 439 Đã viết 6/01/2019 Bài hướng dẫn sử dụng UDF _HttpRequest ở bài viết sau đây: Trang shopee.vn phiên bản mới sau này sử dụng nền tảng React.js khá khó chịu để làm request. Thì sau đây là kinh nghiệm của iêm khi làm login trang này bằng http request: Đầu tiên, ta sẽ ngó thử Live HTTP Headers / F12 để xem Request Headers được gửi đi khi login trang, ta có: Quote Request URL: https://shopee.vn/api/v0/buyer/login/login_post/ :method: POST content-length: 614 content-type: multipart/form-data; boundary=----WebKitFormBoundaryBgu9tK1OnXdXg9OK cookie: _gcl_au=1.1.1779226232.1546796367; SPC_F=M94hkItaJJ1Vms9TMXnvPD8UB6HT6dHv; REC_T_ID=6334bc26-11d9-11e9-9b40-3ce8241b4f1e; csrftoken=bVKWwuo5uthsPXOAtBhD8SPthZLxbIzC; SPC_SC_TK=0a2ce3e3269fe3f4fe46383c4f374f09; SPC_SC_UD=118420826; SPC_T_ID="cnrVkRy9GHdFyBfBtmGqpHQIL3jQP"... referer: https://shopee.vn/api/v0/buyer/login/ x-api-source: pc x-csrftoken: bVKWwuo5uthsPXOAtBhD8SPthZLxbIzC x-requested-with: XMLHttpRequest ------WebKitFormBoundaryBgu9tK1OnXdXg9OK Content-Disposition: form-data; name="login_key" Tên_Tài_khoản ------WebKitFormBoundaryBgu9tK1OnXdXg9OK Content-Disposition: form-data; name="login_type" username ------WebKitFormBoundaryBgu9tK1OnXdXg9OK Content-Disposition: form-data; name="password_hash" cdf4a007e2b02a0c49fc9b7ccfbb8a10c644f635e1765dcf2a7ab794ddc7edac ------WebKitFormBoundaryBgu9tK1OnXdXg9OK Content-Disposition: form-data; name="captcha" ------WebKitFormBoundaryBgu9tK1OnXdXg9OK Content-Disposition: form-data; name="remember_me" false ------WebKitFormBoundaryBgu9tK1OnXdXg9OK-- Ở Request Headers trên ta thấy có 2 giá trị cần phải tìm là: csrftoken và password_hash. Theo nguyên tắc iêm hay nhắc là tìm từ source HTML khi GET địa chỉ referer (referer: https://shopee.vn/api/v0/buyer/login/) thì ta thấy hoàn toàn không có manh mối nào để tìm 2 giá trị trên, vậy là phải tìm thông tin trong code js, thì thấy những manh mối sau để giải câu hỏi: 1. Password_Hash: Sau một hồi lần mò từ đống js thì ta tìm thấy được đoạn sau: ...{"password_hash",function Ge(e){var e=CryptoJS.SHA256(CryptoJS.MD5(e).toString()).toString();}.... → À, vậy đơn giản password_hash là password đã được Hash MD5, sau đó Hash SHA256 chuỗi MD5 đó. UDF _HttpRequest đã cung cấp 2 hàm Hash này. Ta có: $password_hash = _GetSHA256(_GetMD5($password)) 2. csrftoken: Thằng này thì hơi khó nhằn. Phải sử dụng đến 2 manh mối từ js mới giải được thằng này, ta có 2 đoạn js sau: func("csrftoken", e = function(e, n) {n = n || "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for (var a = "", r = 0; r < e; r++) {var t = Math.floor(Math.random() * n.length); a += n.substring(t, t + 1) }return a}(32), 0) và document.cookie=t+"="+e.csrftoken" → Khá hài hước là csrftoken nó chả phải là chuỗi mã hoá gì ghê gớm hết mà chỉ là một chuỗi ngẫu nhiên có độ dài 32 ký tự từ A-Z, a-z, 0-9. Vậy câu hỏi đặt ra là: "Tạo sai tôi cũng từng thay đại 1 chuỗi trong Live HTTP Headers / F12 vào mà có ra đâu ?". Câu trả lời nằm ở chỗ Cookie cũng phải nạp cái csrftoken vào (nó liên quan đoạn code này nè: document.cookie=t+"="+e.csrftoken"). Các thým xem lại mẫu Live HTTP Headers ở trên là thấy Headers và Cookie đều có csrftoken nhoé. 3. Vậy là xong 2 cái giá trị cần tìm. Tuy nhiên khi thử Run code thì nó vẫn chưa chạy (status 400 Bad Request). Đó là vì quá trình login đòi hỏi cookie phải có các tiền giá trị: SPC_T_ID, SPC_T_IV, SPC_F.... điều này thể hiện qua đoạn js sau: ...t.signature=Object(i.c)("SPC_T_ID"),t.hash=Object(i.c)("SPC_T_IV"),t.meta.device_fingerprint=Object(i.c)("SPC_F"),t.meta=JSON.stringify(t.meta),fetch(e,{method:"post"... → Đơn giản là chỉ cần request đến địa chỉ Referer https://shopee.vn/api/v0/buyer/login/ là có. 4. Thêm một lưu ý nữa trong POST data là tham số: login_type, giá trị tham số này thay đổi theo tài khoản điền vào là gì: + Điền tên: login_type=username + Điền số điện thoại: login_type=phone + Điền email: login_type=email Mọi yếu tố đều đã được giải đáp, vậy là ta có code hoàn chỉnh như sau: Nội dung ẩn Bạn cần Reaction hoặc trả lời chủ đề này để thấy nội dung bị ẩn. Ảnh demo: (Mượn tạm acc của thým HoangVu để làm demo) Quote Đã cập nhật lại code trên, nội dung cập nhật: - Viết lại thành 1 hàm hoàn chỉnh. - Thêm trường hợp sđt phải đổi đầu 0 thành 84. - Thêm chế độ nhận biết bị hỏi Captcha. - Thêm chế độ nhận biết bị hỏi OTP. - Trả về mảng dữ liệu gồm 5 phần tử : [0] Cookie chứa csrftoken, [1] Header chứa csrftoken, [2] UserName, [3] ShopID, [4] ID >>> Xem tiếp bài viết Tương tác với Shopee sau khi đã Login tại 160 10 1 41 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
tinhphu19 0 Đã viết 7/01/2019 Password_Hash tìm trong file js nào vậy anh e tìm thử mà không thấy ? Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Huân Hoàng 439 Đã viết 7/01/2019 59 phút trước, tinhphu19 said: Password_Hash tìm trong file js nào vậy anh e tìm thử mà không thấy ? Thým mở hết tất cả file js lên rồi search sha256 từ từ là thấy Đùa chứ làm về request thì cũng nên học thêm phương pháp debug trên trình duyệt bằng cách set breakpoint javascript https://developers.google.com/web/tools/chrome-devtools/javascript/ . Đọc và hiểu xong là sau này ba cái js mò rất dễ dàng. 1 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
beakhear 0 Đã viết 11/01/2019 thank Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Nguyễn Hoàng Vũ 2 Đã viết 12/01/2019 https://shopee.vn/buyer/login/login_post/ POST /buyer/login/login_post/ HTTP/1.1 Host: shopee.vn User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0 Accept: */* Accept-Language: vi-VN,vi;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: https://shopee.vn/api/v0/buyer/login/ Content-Type: application/x-www-form-urlencoded; charset=UTF-8 If-None-Match-: 55b03-dd8c77f0984f95cd098dd59925ead48f X-Requested-With: XMLHttpRequest Content-Length: 185 Cookie: _gcl_au=1.1.232781227.1545362472; _med=refer; csrftoken=9A8JLlmOWhDWbfVPRs3n363c7o6vWRoq; SPC_IA=-1; SPC_EC=-; SPC_F=rJuaV5jQHM4ne7rANEoQ0jyR2AY0sLum; REC_T_ID=7921796e-04cf-11e9-be26-3ce8241b48b6; SPC_T_ID="1+aYgog0CzsT1a8duZVeDjd+4THfcmPlRBtP9hDG1dkcWMKTzjcou/HABcvldben1GPmjxmS3Nx99MJxnsUOQCndTWFkYSopw9HCtnlWI38="; SPC_U=-; SPC_T_IV="woTKulDU0aEBcqAb5RdWwg=="; _ga=GA1.2.804881808.1545362476; cto_lwid=7f3990e2-7cf8-4c20-b5b2-19e35683adea; cto_idcpy=06714c20-d918-44f0-8401-adff410467e9; SPC_SI=zyhqfq5m52nbej8larprmkjf9gcxgwa7; _gid=GA1.2.2144178586.1547290508; SPC_SC_TK=d6184cffe88ca8ed9ab4bf5d486ef1b0; SPC_SC_UD=119994218; welcomePkgShown=true; bannerShown=true; _fbp=fb.1.1547308936938.1246916371; AMP_TOKEN=%24NOT_FOUND; _dc_gtm_UA-61914164-6=1; _gali=login Connection: keep-alive login_key=hoangvu1093791&login_type=username&password_hash=01be3d2804edd00bfc6b026ef1724109f1be56f73f516c09a2f96e27c0824a31&captcha=&csrfmiddlewaretoken=9A8JLlmOWhDWbfVPRs3n363c7o6vWRoq sao em bắt request các kiểu lại đc như này nhỉ ? A Huân có thể giải đáp k ạ. 1. Của em bắt request k có x-csrftoken thì có cần chèn không ? 2. của em cái csrfmiddlewaretoken=9A8JLlmOWhDWbfVPRs3n363c7o6vWRoq là trong soure có luôn nên k random đc thì như nào ạ. Mong a Huân thông não giúp em cái. thank anh 2 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Huân Hoàng 439 Đã viết 12/01/2019 1 hour ago, Nguyễn Hoàng Vũ said: sao em bắt request các kiểu lại đc như này nhỉ ? A Huân có thể giải đáp k ạ. 1. Của em bắt request k có x-csrftoken thì có cần chèn không ? 2. của em cái csrfmiddlewaretoken=9A8JLlmOWhDWbfVPRs3n363c7o6vWRoq là trong soure có luôn nên k random đc thì như nào ạ. Mong a Huân thông não giúp em cái. thank anh Thì thým và iêm bắt request từ 2 location khác nhau, ví dụ iêm bắt từ cái popup Đăng nhập xuất hiện khi nhấn nút Đăng nhập ở trang chủ, thým thì bắt ở trang đăng nhập riêng (https://shopee.vn/api/v0/buyer/login/ - mà trang này chạy version login cũ __classic__ gì đấy) thì nó ra mẫu request Login khác thôi, nhưng các giá trị cơ bản thì vẫn y như nhau Nếu crsftoken có sẵn trong source thì quá khoẻ cứ việc regex ra xài như đó giờ làm về request, nếu không rq thành công thì thêm cookie csrftoken vào như mục lưu ý số 2. Mấy cái này thì check đơn giản rồi 1 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
hoangle 0 Đã viết 15/01/2019 hay quá. mong bác làm thêm bài đăng nhập trang lotte.vn Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Huân Hoàng 439 Đã viết 15/01/2019 3 giờ trước, hoangle said: hay quá. mong bác làm thêm bài đăng nhập trang lotte.vn Vì đây là bài hướng dẫn shopee nên thým vui lòng tạo một Chủ đề mới trong box AutoIt > Hỏi đáp để 4rum thêm sôi động và topic này không bị loãng. Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Huân Hoàng 439 Đã viết 22/03/2019 Đã cập nhật hàm Shopee_Login và viết thêm hướng dẫn tương tác shopee sau khi đã login, chi tiết ở ở đầu bài viết 1 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Công Nguyễn 2 Đã viết 31/03/2019 thank chủ thớt thank chủ thớt Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Hữu Tuấn 0 Đã viết 28/04/2019 On 7/1/2019 at 06:16, Huân Hoàng said: Tks chủ Thớt On 12/1/2019 at 23:49, Nguyễn Hoàng Vũ said: Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
hangnguyentinhthivn 2 Đã viết 2/06/2019 hay qua Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Huỳnh Đăng 0 Đã viết 4/06/2019 Cảm ơn thớt Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
BlackOver 0 Đã viết 10/06/2019 E copy hàm trên về chạy bị lỗi này là sao vậy các bác? E cảm ơn ah. Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites
Thiên Chi Kiều Nữ 962 Đã viết 10/06/2019 6 giờ trước, BlackOver said: E copy hàm trên về chạy bị lỗi này là sao vậy các bác? E cảm ơn ah. Lỗi nó thông báo bình thường thế thôi bạn à, không sao cả nhé, vẫn ra kết quả bình thường. 3 Trích dẫn Chia sẻ bài đăng này Link tới bài viết Share on other sites