#8 Bắt đầu chiến dịch – Cách lấy dữ liệu spiderum thông qua Postman

#8 Bắt đầu chiến dịch – Cách lấy dữ liệu spiderum thông qua Postman

November 10, 2020 1 By Nam Vu

Đầu tiên, mình phải đề cập đến việc mình là một người ngoài không hề biết bộ API của spiderum nên vấn đề tìm các endpoint mất rất nhiều thời gian.

Endpoint chính là URL: https://abc.com/foo/bar và lúc này ta gọi /foo/bar là Endpoint vì Url đằng trước thì giống nhau trong hầu hết các trường hợp

Một Endpoint (URL) có thể làm được nhiều thứ bằng việc lựa chọn cách gọi theo giao thức HTTP: GET, POST, PUT, DELETE, …

Xử lý phụ thuộc vào định dạng dữ liệu gửi đến Endpoint.

Ok, vậy mình thu thập endpoint như thế nào trước khi bắt đầu test Api
Đầu tiên phải xem công nghệ mà spiderum sử dụng là gì?

Bật Network lên (f12) bạn sẽ biết gần như tất cả.

Ví dụ

– Mình nhìn thẻ ng-version mình có thể đoán được frontend mấy anh spiderum viết bằng angular 4

– Để ý ảnh thumbnails mình sẽ phát hiện spiderum thuê server hosting là cloud của amazon và được đặt ở singapore (server ở đông nam á)

– Thử đăng nhập và thông qua network mình biết spiderum dùng cơ chế xác thực SSO (Single Sign On) với địa chỉ xác thực là https://auth.spiderum.com/sso

SSO là gì và hoạt động như thế nào thì bạn đọc có thể xem thêm ở đây nhé
https://techmaster.vn/posts/34688/xac-thuc-single-sign-on-la-gi-va-no-hoat-dong-nhu-the-nao

Được rồi! Đó là cách mình thu thập endpoint của spiderum. Bây giờ mình sẽ liệt kê những Endpoint mà mình sẽ test qua postman nhé!

– https://auth.spiderum.com/sso: Xác thực đăng nhập
– https://spiderum.com/api/v1/notification/number: Đếm số thông báo của người dùng đang đăng nhập
– https://spiderum.com/api/v2/message/getNumberNewMessages: Đếm số tin nhắn
– https://spiderum.com/api/v2/user/checkCustomDomain?profile_name=testyopmail: Kiểm tra hồ sơ xem có phải nằm trong danh sách thanh viên nổi bật hay không (Các thành viên trong đội ngũ spiderum có những trang cá nhân hoàn toàn khác người người dùng thông thường về mặt giao diện có thể tự chỉnh sửa theo ý từng thành viên đó)
– https://spiderum.com/api/v2/user/getUserNumberDataInfo?profile_name=vuthanhnam94: Lấy toàn bộ thông tin người dùng đang đăng nhập (Thứ mà hiển thị ở trang cá nhân)
– https://spiderum.com/api/v2/user/getUserCreatedPosts?profile_name=vuthanhnam94&page=1: Lấy các bài viết của người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v2/user/getUserComments?profile_name=vuthanhnam94&page=1: Lấy các bình luận của người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v2/user/getUserSavedPosts?page=1: Lấy các bài viết được lưu của người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v2/draft/get-user-drafts?page=1: Lấy các bài viết nháp của người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v2/user/getUserRequestsCopy?page=1: Lấy các yêu cầu sao chép bài viết của người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v2/user/getUserFollowers?page=1: Lấy thông tin của những thành viên khác theo dõi người dùng nằm ở trang thứ nhất
– https://spiderum.com/api/v1/notification/user: Lấy 25 thông báo mới nhất của người dùng- https://spiderum.com/api/v2/message/getChatGroups?limit=10&offset=0: Lấy 10 tin nhắn chat mới nhất của người dùng
– https://spiderum.com/api/v1/search?q=a&type=post&page=1: Tìm kiếm bài viết có chứa chữ “a” hiển thị trang thứ nhất
– https://spiderum.com/api/v1/search?q=a&type=user&page=1: Tìm kiếm người dùng có chứa chữ “a” hiển thị trang thứ nhất
– https://spiderum.com/api/v1/search?q=a&type=tag&page=1: Tìm kiếm thẻ (tag) có chứa chữ “a” hiển thị trang thứ nhất
– https://spiderum.com/api/v1/category/khoa-hoc-cong-nghe?type=hot&page=1: Lấy danh sách những bài viết hot ở danh mục khoa học công nghệ hiển thị ở trang thứ nhất
– https://spiderum.com/api/v1/post/getRandomPost/19: Lấy bài viết ngẫu nhiên
– https://spiderum.com/api/v1/feed/getPostsInFeed?type=hot&page=1: Lấy bài viết hot đưa lên danh sách dành cho bạn hiển thị trang thứ nhất
– https://spiderum.com/api/v2/draft/create-draft: Tạo bài viết nháp (save nháp)
– https://spiderum.com/api/v2/draft/delete-draft: Xóa bài viết nháp (2 tính năng này là tính năng tự động lưu nháp bài viết và sau khi đăng bài xong thì xóa lưu nháp đó)
– https://spiderum.com/api/v1/post/create: Viết bài
– https://spiderum.com/api/v1/post/edit: Sửa bài viết
– https://spiderum.com/api/v1/post/delete: Xóa bài viết
– https://spiderum.com/api/v1/comment/create: Viết bình luận
– https://spiderum.com/api/v2/message/sendMessage: Gửi tin nhắn
– https://spiderum.com/api/v1/relation/user-post/vote: Upvote/downvote (nếu upvote thì loại action = 2, nếu downvote thì loại action = 0
– https://spiderum.com/api/v1/relation/user-category/subscribe: Theo dõi danh mục
– https://spiderum.com/api/v1/relation/user-category/unsubscribe: Bỏ theo dõi danh mục
– https://spiderum.com/api/v1/relation/user-user/follow: Theo dõi người dùng
– https://spiderum.com/api/v1/relation/user-user/unfollow: Bỏ theo dõi người dùng
– https://spiderum.com/api/v1/relation/user-post/save: Lưu bài viết
– https://spiderum.com/api/v1/relation/user-post/unsave: Bỏ lưu bài viết
– https://spiderum.com/api/v1/relation/user-post/request-copy: Yêu cầu sao chép bài viết
– https://spiderum.com/api/v1/relation/user-post/approve-request: Cho phép sao chép bài viết

Mình sẽ lấy một ví dụ tạo bài viết thông qua postman để các bạn hiểu được cách đăng bài tự động sẽ như thế nào nhé. Việc tự động hóa thì chỉ việc xây dựng một con job chứ đúng thời gian đó thì gọi api đăng bài thôi. Bạn hiểu là khá đơn giản đúng không

Đầu tiên là phải tạo user

Do spiderum thực hiện xác thực email ngay bước tạo email nên bước này postman không thể tự động hóa vào hòm mail để click xác thực được nên mình cũng không tốn thời gian làm gì ở bước này. Mình tạo một yopmail giả lập được sinh ra ngay khi có tin nhắn xác thực.

Cho những ai chưa biết yopmail là gì?

YOPmail là dịch vụ email dùng một lần. Nó cho phép bạn sử dụng địa chỉ email yopmail.com và cung cấp quyền truy cập vào hộp thư đến cho địa chỉ đó ngay cả khi đã có người sử dụng.
Bạn có thể sử dụng YOPmail khi được yêu cầu nhập địa chỉ email mà không muốn sử dụng tài khoản thật. Sử dụng nó cho trang web yêu cầu đăng nhập hoặc ứng dụng kiểm tra và bạn sẽ không phải nhận các bản tin hoặc phải xử lý thư rác trong Gmail.

Không giống tài khoản email thường, YOPmail không riêng tư hoặc bảo vệ bằng mật khẩu, do đó bạn không nên sử dụng nó với mục đích quan trọng hoặc cá nhân.

Người dùng cũng không cần thiết lập nó. Khi cần nhập biểu mẫu địa chỉ trên trang web và không muốn sử dụng địa chỉ của mình, chỉ cần nhập địa chỉ ngẫu nhiên.

Sau khi có tài khoản thì đăng nhập và lấy token thông qua postman

Đội dev spiderum cũng không phải dạng vừa khi chọn mô hình xác thực này (thực sự rất bảo mật).Các thông số để lấy được token như sau:

– Request URL: https://auth.spiderum.com/sso (Như mình đã đề cập bên trên, nó chính là endpoint xác thực định danh người dùng, dựa vào đây spiderum có thể nhận biết được bạn là ai)
– Method: Post (Là dạng phương thức mà câu truy vấn sẽ được gửi trong phần thân của request)
– Content-Type: application/x-www-form-urlencoded (Loại nội dung mà bạn đặt trong phần thân request)
– name: testyopmail (Cái này là username mà bạn đã đăng ký bên trên)
– password: 123456789 (Mật khẩu của username bên trên luôn)

Sau khi lấy session. Bạn sẽ nhận được thêm đoạn mã redirect 

<p>Found. Redirecting to <a href=”https://spiderum.com/?gi=v0Cg4dYHoRhu”>https://spiderum.com/?gi=v0Cg4dYHoRhu</a></p>

Từ đoạn mã “v0Cg4dYHoRhu” bạn call tiếp spiderum.com/?gi=v0Cg4dYHoRhu khi đó bạn mới mấy được mã token chính để có thể thực hiện được các request tiếp theo

window['TRANSFER_STATE'] = {"cached":true,"api/v2/role/refreshToken":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NjcwNTUsInN0YXR1cyI6MSwibmFtZSI6InRlc3R5b3BtYWlsIiwiZmJfaWQiOm51bGwsImRpc3BsYXlfbmFtZSI6InRlc3R5b3BtYWlsIiwiZW1haWwiOiJ0ZXN0QHlvcG1haWwuY29tIiwiZ3JhdmF0YXIiOiJhNGQwYTU1OTA5OGQxMTM3YWYzYWI5ZThkMDNlN2FkOCIsImFiYW5kb24iOnsiZ2xvYmFsIjp7fSwiY2F0ZWdvcnkiOltdfSwicm9sZSI6bnVsbCwiaWF0IjoxNjA0NTYzOTEyLCJleHAiOjE2MDcxNTU5MTJ9.SuifCZrwBZsCT0TfrIvHIWml-C7z4kcLx6JRCHCywXY"}

Token rất dài và loằng ngoằng, nhưng đừng lo. Bạn có thể đọc hiểu token thông qua trang https://jwt.io/

Đăng bài qua Api

Giờ thì có token rồi bạn hãy dùng nó để tạo bài viết thông qua api nhé!
Bên trên mình ghi chú rồi nên mình không mở ngoặc giải thích nữa nhé

Request URL: https://spiderum.com/api/v1/post/create
Method: Post
Content-Type: application/json; charset=utf-8
Body: raw

{
  "title": "testyopmail",
  "body": "<div>testyopmail</div>",
  "type": 0,
  "url_description": "",
  "content": "",
  "new_title": "",
  "description": "",
  "public_post": false,
  "tags": [
    {
      "name": "TESTYOPMAIL"
    }
  ],
  "cat_id": 19
}

Sau khi chạy thành công thì nó sẽ ra slug chính là cái mà gắn đằng sau đường link bài biết ý 
https://spiderum.com/bai-dang/testyopmail-v1d

Bạn có lẽ đã hiểu cách thức Api hoạt động và cách mình kiểm thử các Api như nào rồi. Chỉ cần truyền body input là thứ mình muốn nằm trong test case thì sẽ có thể test được các endpoint mà mình liệt kê bên trên.

Theo cách tương tự mình có thể lấy được danh sách các user của tất cả mọi người theo api search hoặc danh sách người theo dõi

Từ thông tin cơ bản như user_id và name mình tiếp tục gọi api lấy thông tin chi tiết người dùng với endpoint mình liệt kê bên trên

Tiếp đó là lấy tất cả những bài viết của người dùng bạn muốn lấy

Rồi mình sẽ lưu lại thông tin cần thiết này vào file csv. Đây chính là đầu vào để cho Performance testing.

Ok, đến đây thôi! Bài viết khá dài, hi vọng các bạn có thể mường tượng ra được cách kiểm thử Api là như nào và làm sao có thể lấy được thông tin người dùng từ một trang web.

Có lẽ bạn cũng đã hiểu tại sao những lỗ hổng bị lộ thông tin người dùng khiến của các trang như facebook nó hoạt động như thế nào. Nếu bạn tham gia một fanpage hay group nào trên facebook thì chắc chắn chủ kênh sẽ có thể lấy được các thông tin của bạn, tất nhiên là thông tin công khai. Còn làm gì thì mình không biết 😀

Như spiderum thì khi mình có 1 danh sách email rồi thì mình sẽ làm gì đây. Có lẽ là để spam mail hòm thư tất cả mọi người hoặc  có thể kiếm bồ trên spiderum chẳng hạn!

Các bạn nghĩ sao về việc 1 trang web công khai quá nhiều thông tin cá nhân người dùng, hãy để lại bình luận bên dưới nhé!