Jump to content

Bảng xếp hạng


Nội dung phổ biến

Showing content with the highest reputation on 24/03/2020 ở mọi khu vực

  1. 1 point
    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ó: Ở 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: [Hidden Content] Ảnh demo: (Mượn tạm acc của thým HoangVu để làm demo) >>> Xem tiếp bài viết Tương tác với Shopee sau khi đã Login tại
  2. 1 point
    Chào các bạn, hiện tại thị trường tools về facebook khá là đau đầu do con AI dở hơi của facebook liên tục cho ăn checkpoint và die hàng loạt clone :v kể cả cuộc chiến Ad Breaks dính lứu tới Việt Nam đều có phần hãm . Thế nên Mỵ sẽ chuyển qua request một số trang khác thử sức xem như thế nào :") Ở topic này mỵ và mọi người sẽ chia sẻ code về request shopee.vn nhé. ================================================================== Code if-none-match- : ================================================================== Update code (01/03/2020) : Hướng dẫn request thanh toán cho shopee (checkout for shopee) ================================================================== Code : đăng nhập shopee.vn [Hidden Content] Hàm trên là khởi nguồn của mọi việc, đăng nhập xong, lấy được cookie thì mình làm gì tiếp mới làm được Chú ý : các request sau này các bạn nhớ addheader đầy đủ nhé :). Sau khi login bạn mới có thể sử dụng code sau nhé. Code add địa chỉ của shop nhé :[Hidden Content] Chia sẻ code đăng ký shopee :v mỵ mới làm 1/2 còn 1/2 nữa..hoàn thành sau :D .. [Hidden Content] API tìm kiếm sản phẩm :v Sau khi đăng nhập, request GET với link này là có kết qủa nhé string Keyword = "Bao cao su"; string SoLuongTimKiem = "50"; string LinkTK = "https://shopee.vn/api/v2/search_items/?by=relevancy&keyword="+Keyword+"&limit="+SoLuongTimKiem+"&newest=0&order=desc&page_type=search" * Update code 01/05/2020 : Update code đẩy sản phẩm Code đẩy sản phẩm cám ơn bạn @songhanpoo cho mượn nick để test code : string ID_San_Pham = "7330304651"; // bạn tự thay id sản phẩm của bạn string SPC_CDS = "1"; // bạn tự thay SPC_CDS của bạn HttpRequest request = new HttpRequest() { UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36", Cookies = new CookieStorage(), }; ....Chạy code đăng nhập......Đăng nhập xong chạy tiếp code dưới request.Cookies.Add(new System.Net.Cookie("SPC_CDS", SPC_CDS, "/", "shopee.vn")); string DataPost = @"{""id"":"+ ID_San_Pham + @"}"; request.Referer = "https://banhang.shopee.vn/portal/product/list/all"; HttpResponse response = request.Post("https://banhang.shopee.vn/api/v3/product/boost_product/?version=3.1.0&SPC_CDS="+ SPC_CDS + "&SPC_CDS_VER=2", DataPost, "application/json;charset=UTF-8"); string KetQua = response.ToString(); * Update code 07/05/2020 : Lấy danh sách tin nhắn chưa đọc từ chat của shopee . Code của bạn @Đoàn Minh Tâm
  3. 1 point
    Sau bài viết đăng nhập Shopee : thì iêm sẽ hướng dẫn các cách thức tương tác request với nó bởi trang này khá đa dạng trong các kiểu request gây bối rối cho người code. Điều đầu tiên iêm muốn nói là ta không thể request trực tiếp đến địa chỉ cửa hàng được, ví dụ như khi request đến cửa hàng Lock&Lock Official Store có địa chỉ https://shopee.vn/locknlockvn thì ta sẽ bị redirect ngay đến https://shopee.vn/?__classic__=1 và không có kết quả gì liên quan cửa hàng này, nguyên do là đoạn js của nó: <script>function showBody(){document&&document.body&&(document.body.style.visibility="visible")}var SHORT_URL_MAX_LENGTH=256,pathname=location&&location.pathname;if("/"!==pathname&&pathname.length<SHORT_URL_MAX_LENGTH&&""===location.hash&&-1===pathname.indexOf("-")&&0===pathname.lastIndexOf("/")){document&&document.body&&(document.body.style.visibility="hidden"),setTimeout(showBody,5e3);var xhr=new XMLHttpRequest;xhr.open("GET","/api/v0/is_short_url/?path="+pathname.replace("/","")),xhr.setRequestHeader("Content-Type","application/json"),xhr.setRequestHeader("Accept","application/json"),xhr.onreadystatechange=function(){if(4===this.readyState)if(200===this.status)if(JSON.parse(this.responseText).error)showBody();else{var e=document.createElement("a");e.href=location.href,e.search+="?"===e.search[0]?"&__classic__=1":"?__classic__=1",location.href=e.href}else showBody()},xhr.send()}</script> <script>if(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,window.PerformanceObserver){var observer=new window.PerformanceObserver(function(e){for(var r=e.getEntries(),n=0;n<r.length;n++){var a=r[n],i=a.name,t=Math.round(a.startTime+a.duration);ga("send",{hitType:"timing",timingCategory:"Performance Metrics",timingVar:i,timingValue:t})}});observer.observe({entryTypes:["paint"]})}</script> Vì vậy, ta chỉ có thể lấy thông tin cửa hàng từ api mà trang shopee cung cấp, và iêm sẽ trang bị cho các thým đoạn code sau để lấy thông tin của một cửa hàng: $Info = Shopee_ShopInfo('https://shopee.vn/locknlockvn/', True) Func Shopee_ShopInfo($iURL, $vFullInfo = True) Local $ShopName = StringRegExp($iURL, 'https://shopee.vn/([^\/]+)', 1) If @error Then Return SetError(1) Local $rq = _HttpRequest(2, 'https://shopee.vn/api/v2/shop/get?username=' & $ShopName[0]) If $vFullInfo Then Return _HTMLDecode($rq) Return StringRegExp($rq, '"shopid"\s*?:\s*?(\d+)', 1)[0] EndFunc Hàm Shopee_ShopInfo sẽ trả về dữ liệu phụ thuộc tham số $vFullInfo, nếu $vFullInfo = True thì sẽ trả về đầy đủ thông tin như sau: Còn nếu để $vFullInfo = False thì sẽ chỉ trả về ShopID. ------------------------------------------------------------------------------------------------------------------------------------------ OK, giờ vào vấn đề chính, khi ta request tương tác với shopee thì ta để ý kỹ những điều này khi đọc Live HTTP Headers hoặc F12 Dev Tools Trình duyệt: - Nếu tương tác với trang shopee.vn thì thường có đi kèm với csrftoken trong header và cookie. - Nếu tương tác với trang banhang.shopee.vn thì thường có đi kèm với SPC_CDS trong param của URL và cookie. Bây giờ ta thử một số tương tác sau: 1/ Request nhấn nút "Theo Dõi" một cửa hàng: Ví dụ ta request "Theo Dõi" cửa hàng Lock&Lock Official Store tại địa chỉ sau: https://shopee.vn/locknlockvn , ta bắt request sẽ được thế này: - Số 55771655 trong URL là ShopID, cái này thì chỉ cần sử dụng hàm Shopee_ShopInfo đã cung cấp ở trên với $vFullInfo = False là xong. - Ta thấy có xuất hiện csrftoken ở header và cookie → Khi request ta nhớ nạp cả 2 cái csrftoken này vào tham số $Cookie và $Header của hàm _HttpRequest thì mới request thành công. Như đã nói ở bài hướng dẫn login shopee, csrftoken chỉ là 1 chuỗi ngẫu nhiên nên ta có thể lấy luôn csrftoken mà ta bắt được để nạp vào, hoặc sử dụng kết quả trả về của hàm Shopee_Login mà iêm đã cung cấp (Xin nhắc lại, hàm Shopee_Login($Username, $Password) sẽ trả về mảng 5 phần tử: [0] Cookie chứa csrftoken, [1] Header chứa csrftoken, [2] UserName, [3] ShopID, [4] ID) Vậy ta có code:[Hidden Content] 2/ Thay đổi trạng thái "Xác minh đăng nhập OTP": Để thay đổi trạng thái xác nhận OTP thì ta phải đăng nhập vào trang https://banhang.shopee.vn/account/signin rồi sau đó vào Cài Đặt rồi vào Thiết Lập Shop , và ta bắt được request khi tắt bật nút trượt Xác thực OTP: - Method request là PUT chứ không phải POST, cần chú ý. - Ta thấy sẽ xuất hiện SPC_CDS trong param của URL và cookie như ghi chú đã nói ở phía trên. Thì nó ở đâu ra ? Nó sinh ra từ js và nó cũng như csrftoken có liên quan đến Session của shopee, vì thế phải nạp nó vào cả 2 chỗ thì mới request thành công và giá trị của nó ta để là số 1 là được rồi, khỏi cần dông dài e850f29a-d704-48f0-8227-c9452adfc224 như request bắt được ở trên chi cho mệt. - 118343558 trong URL là ID của tài khoản, nó là phần tử thứ 4 trong mảng trả về của hàm Shopee_login đấy. - "disable_new_device_login_otp" trong Data2Send: nếu là false thì Bật OTP, nếu là true thì tắt OTP Ta có code:[Hidden Content] 3/ Chat với Shop: Chat shopee dựa trên WebSocket thì _HttpRequest đã hỗ trợ tương tác WebSocket trên Win10 (Win8 trở xuống WinHttp không hỗ trợ WebSocket) Code như thế này:[Hidden Content] Trong đó $from_userid, $to_userid , $ShopID, $itemid dễ dàng tìm được nên iêm sẽ không code cụ thể nữa, ai thích tìm hiểu thì tự code nhoé ($from_userid thì lấy từ kết quả trả về của hàm Shoppe_Login. $to_userid , $ShopID thì từ kết quả hàm Shopee_ShopInfo ...) Demo: https://www.youtube.com/watch?v=p2zby2DEw1g Vậy là iêm đã lướt qua một số request cơ bản tương tác với Shopee, chúc các thým tìm hiểu vui vẻ và thích thú với nhánh HTTP Request này
  4. 1 point
    Thêm sản phẩm vào giỏ hàng :[Hidden Content]





×
×
  • Create New...