Jump to content
Sign in to follow this  
Huân Hoàng

_HttpRequest: Tương tác với trang shopee.vn sau khi đã đăng nhập

Recommended Posts

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:

sFDvAHa.png

 

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:

Quote

https://shopee.vn/api/v0/buyer/follow/shop/55771655/
POST api/v0/buyer/follow/shop/55771655/
Referer: https://shopee.vn/locknlockvn
content-type: application/json
cookie: csrftoken=0wdLmmE9BEbxXWVnrvKmuj9HzEI3fz9D; SPC_EC="2Mh4bgzOfOvvjSvHGb01ZoK11NIbl7jG67viIDH8M+JJvodf7mEsBQlW1wWa6XKNKlH58j8tQ7T/50BZSvxTf7Y+k1iA8d/VkxZ9v/x1c3Yu/8WYKyfiOCj3LN3LRZmQzkZNiwL3HGkTQ9nETekVe6ssmP4+Bk/nqzydJIz6wTU="; SPC_SC_UD=118343558; SPC_U=118343558; SPC_T_IV="LWcUndRs/6yt6YWVj29niw==";
x-csrftoken: 0wdLmmE9BEbxXWVnrvKmuj9HzEI3fz9D
x-requested-with: XMLHttpRequest

{}

- 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

    Give reaction or reply to this topic to see the 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:
 

Quote

https://banhang.shopee.vn/api/v2/users/118343558/?SPC_CDS=e850f29a-d704-48f0-8227-c9452adfc224&SPC_CDS_VER=2

PUT /api/v2/users/118343558/?SPC_CDS=e850f29a-d704-48f0-8227-c9452adfc224&SPC_CDS_VER=2 HTTP/1.1
Content-Type: application/json;charset=utf-8
Referer: https://banhang.shopee.vn/portal/settings/shop/general
Cookie: SPC_CDS=e850f29a-d704-48f0-8227-c9452adfc224; SPC_SC_TK=d0c832bed5e725eb600f47e1b0cd26a0; UYOMAPJWEMDGJ=; SPC_SC_UD=118343558; SPC_SC_SA_TK=; SPC_SC_SA_UD=; SPC_EC="4PbLWlrLTX8JYJ8mEn5Ta4imL69XX+q.........

{"user":{"user_command":"new_device_login_otp","hide_likes":0,"disable_new_device_login_otp":false}}

 

- 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

    Give reaction or reply to this topic to see the 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

    Give reaction or reply to this topic to see the 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 :a08:

  • Like 32
  • Thanks 2
  • Love 10

Share this post


Link to post
Share on other sites

em có chút vấn đề với việc request thêm vào giỏ hàng , có những món đồ như son chẳng hạn, muốn thêm vào giỏ hàng thì phải request kèm cái $modelid, mà em k tìm được cái này ở đâu 121479884b5067f60f.jpg

 

Share this post


Link to post
Share on other sites
2 giờ trước, Quang Vũ said:

em có chút vấn đề với việc request thêm vào giỏ hàng , có những món đồ như son chẳng hạn, muốn thêm vào giỏ hàng thì phải request kèm cái $modelid, mà em k tìm được cái này ở đâu 121479884b5067f60f.jpg

 

Bạn cho mình xin link để xem nào ??:167788223418464:

Share this post


Link to post
Share on other sites
On 2/6/2019 at 23:11, Quang Vũ said:

em có chút vấn đề với việc request thêm vào giỏ hàng , có những món đồ như son chẳng hạn, muốn thêm vào giỏ hàng thì phải request kèm cái $modelid, mà em k tìm được cái này ở đâu 121479884b5067f60f.jpg

 

team mình vừa hoàn thành xong đoạn mã truy xuất modelid của hệ thống shopee nha. bạn có nhu cầu thì inbox mình, lấy giá cà phê sáng thôi :classic_friend:

 

Demo1: https://shopee.vn/Son-Kem-Lì-Wet-n-Wild-MegaLast-Liquid-Catsuit-Matte-Lipstick-MUA-1-TẶNG-1-i.156112.252553581

zFVuT93.png

 

Demo 2: https://shopee.vn/Son-kem-lì-nhẹ-môi-cao-cấp-Rouge-Signature-L'Oreal-Paris-7ml-i.37251933.1941818057

bG3Pl7O.png

 

vuHEYPw.png

 

  • Haha 1
  • Love 1

Share this post


Link to post
Share on other sites

đã khi nào gặp phải cái này chưa admin post sản phẩm bị {"message": "session expired", "err_message": ""} api https://banhang.shopee.vn/api/v2/products/?

 

với lỗi {"message": "failed to decode json", "errcode": 100}  api https://banhang.shopee.vn/api/v2/products/?

=============================================================================
Edit : bạn không nên viết tách ra vậy nhé, có thể edit bài để viết thêm cũng được.

Share this post


Link to post
Share on other sites

Thank chia sẻ của thớt, mình đang tập viết 1 tools đơn giản crawl shopee lấy giá sản phẩm để cập nhật vào web mình. Tuy nhiên request đến đều bị redirect ngay đến https://shopee.vn/?__classic__=1  và không thể thấy trang sản phẩm chi tiết như mở bình thường. Các bác có cách nào lấy các thông tin như giá, tình trạng sp từ trang chi tiết ko ah?

  • Like 1

Share this post


Link to post
Share on other sites
10 giờ trước, homegift said:

Thank chia sẻ của thớt, mình đang tập viết 1 tools đơn giản crawl shopee lấy giá sản phẩm để cập nhật vào web mình. Tuy nhiên request đến đều bị redirect ngay đến https://shopee.vn/?__classic__=1  và không thể thấy trang sản phẩm chi tiết như mở bình thường. Các bác có cách nào lấy các thông tin như giá, tình trạng sp từ trang chi tiết ko ah?

Đợi bác chủ thớt rep mà lâu thế :a21:........ hình như chỉ cần có được modelID sản phẩm là ra kìa..

  • Love 1

Share this post


Link to post
Share on other sites

Theo như hình hiểu thì Shopee chặn những truy xuất không bình thường như của user, thông qua header và token gì đó, bác nào có thể nói rõ hơn không ah, vì em dùng curl của php gửi request 

Share this post


Link to post
Share on other sites
6 phút trước, homegift said:

Theo như hình hiểu thì Shopee chặn những truy xuất không bình thường như của user, thông qua header và token gì đó, bác nào có thể nói rõ hơn không ah, vì em dùng curl của php gửi request 

request là như nhau thôi bạn à, shopee chặn là vì mình khai báo các parram không đúng thôi :v .. 

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...