Jump to content

Bảng xếp hạng


Nội dung phổ biến

Showing content with the highest reputation on 19/01/2021 ở mọi khu vực

  1. 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
  2. 1 point
    Như ae đã biết, vụ checkout shopee giờ khá khoai. Hnay rảnh rỗi - sang tháng mới - tặng ae đoạn code checkout Shopee. Mà chính xác hơn là solution cho ae quất. Giá trị: 10.000.000 VND :v (ảo tưởng tí) 1. x-track-id là gì? Như ae thấy, giờ khi call place_order, trong header sẽ có thằng x-track-id. Vậy nó là con mẹ gì vậy? Shopee giờ khôn hơn rồi. Đầu tiên, em nó sẽ dùng vài thông tin trong đoạn trả về của api checkout/get + thông tin account đặt hàng => Mã hóa SHA512 => tạo ra 1 chuỗi x-track-id. Mà SHA512 là mã hóa 1 chiều, nên cơ bản là không thể giải mã. Vậy shopee check valid cái x-track-id thế nào? Cũng giống như việc check password vậy, shopee sẽ dựa vào thông tin bạn post lên ở api place_order và cũng mã hóa các thông tin cần thiết => sau đó so sánh kq đó với chính cái x-track-id bạn post llên trong header. Lý thuyết thì vậy rồi, giờ là cách tính x-track-id. [Hidden Content] Kết luận 1: chuỗi mã hóa thì fix bởi các tham số như trên, còn key mã hóa thì sẽ phụ cmn thuộc vào userid của thằng đang mua. Và thằng x-track-id này lại trở thành key của hàm mã hóa data json. 2. X-CV-ID là gì? Tôi có cần post cái của nợ gì mã hóa lên không? - Thực ra m cũng đ' biết X-CV-ID là cm gì. - Tôi có cần post cái của nợ gì mã hóa lên không? Trả lời: Tùy các bạn, nó phụ thuộc vào độ nguy hiểm của các bạn. Riêng tôi, tôi thích đơn giản, yêu màu tím ! Đoạn jav dài quá, chưa beautify nên thôi nợ k post nhé. Về cơ bản ae thấy khi nó post api place_order => nó sẽ tự chèn X-CV-ID = 100. Tôi k biết là gì, tại sao lại 100 mà đ' phải 999 hay 9999. Như tôi đã đề cập ở trên đấy "Tùy các bạn, nó phụ thuộc vào độ nguy hiểm của các bạn". Các bạn thích post data mã hóa cho nguy hiểm hoặc thích số 100 thì cứ cho nó là 100 đi. Còn tôi, tôi thích số 69 anh em ạ. Nên tôi cho nó = 69. Vì nó là 69 nên tôi chỉ cần post đoạn json như trước kia lên mà thôi. K cần thiết mã hóa làm gì cả. Kết luận 2: - X-CV-ID >= 100 ==> thì post data mã hóa (Mà trong bài này m có hướng dẫn cách mã hóa data json đ' đâu?) - 0 < X-CV-ID < 100 ==> Post cái json như mọi khi bạn vẫn làm :) Chốt: AE chỉ cần tính đúng x-track-id là đủ. Ae đã có 10tr cho tháng 3 chưa? Ngại gì k thử nhỉ. Hãy để lại 1 vài like và ít còm men cho người ae thiện lành nào !
  3. 1 point
    Mỵ vừa check xong một số tài khoản edumal được share trên mạng share lại cho các bạn học hành về lập trình android, excel, bất động sản, yoga, ca hát thanh nhạc, nói chuyện, Lê Thẩm Dương,dạy con, khởi nghiệp. ..vv.vv [Hidden Content]
  4. 1 point
    FB nó mã hóa password rồi mà mỵ không biết giải nên ko thể login được :v
  5. 1 point
  6. 1 point
  7. 1 point
    Ví dụ tiếp theo về xNet đó là add giá trị header vào gửi kèm cùng request GET hoặc POST using (var request = new HttpRequest("https://teamcodedao.com/forum")) { request.Cookies = new CookieDictionary() { {"hash", "yrttsumi"}, {"super-hash", "df56ghd"} }; request[HttpHeader.DNT] = "1"; request["X-Secret-Param"] = "UFO"; request.AddHeader("X-Tmp-Secret-Param", "42"); request.AddHeader(HttpHeader.Referer, "https://teamcodedao.com/forum"); request.Get("/"); } Ví dụ về add Proxy hoặc Socks cho xNet . Cái này chắc nhiều bạn làm về MMO thì chắc cần nhỉ :)[Hidden Content] Ví dụ tiếp theo về xNet đó là lấy giá trị header : [Hidden Content]





×
×
  • Create New...