Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Lab: Dùng ngôn ngữ Python để thực hiện lấy ticket từ Network Controller ( APIC-EM )

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lab: Dùng ngôn ngữ Python để thực hiện lấy ticket từ Network Controller ( APIC-EM )



    Trước khi bắt đầu bài Lab ta cần lưu ý :
    • Bài lab được thực hiên trên HĐH Windows
    • Tại sao phải lấy ticket ?. Để chương trình có thể giao tiếp với Controller thì chúng ta phải thực hiện xác thực, và khi đã xác thực thành công Controller sẽ gửi về cho bạn một dãy Ticket. Với Ticket này chúng ta mới có thể thực hiện các thao tác như Get, Post,... giữa chương trình và Controller. Ticket chỉ có hiệu lực trong một phiên làm việc.

    Các bước viết chương trình :

    Bước 1 : Cài đặt thư viện

    Ở bài này chúng ta cần phải gửi các loại yêu cầu http đến server và nhận response từ server nên ta cần cài đặt thư viện requests để thực hiện các yêu cầu đó.
    • Bấm tổ hợp phím windows +R để mở Command Line (cmd)
    • Trong màn hình cmd gõ :
    python –m pip install requests –user



    Bước 2: Viết hàm get để lấy ticket

    Tạo file getTicket.py trong thư mục C:\python để viết chương trình.

    Nội dung code :

    Thư viện requests giúp gửi các yêu cầu loại http đến server và nhận response
    Thư viện json cho phép mã hóa, giải mã các đối tượng
    Code:
    import requests
    import json
    Khai bao thông tin APIC-EM
    Code:
    APICEM_IP = '10.215.26.10'
    VERSION = 'v1'
    USERNAME = 'admin'
    PASSWORD = 'VnPro@123'
    Tắt tin nhắn cảnh báo trang web không có xác thực SSL.
    Code:
    requests.packages.urllib3.disable_warnings()
    Tạo hàm get để lấy ticket
    Code:
    def get_ticket(ip= APICEM_IP,ver= VERSION,uname= USERNAME,pword= PASSWORD,api=’’,params=’’):
    Tạo 1 jsonObject có 2 key username,password có value tương ứng là uname,pword
    Code:
    r_json = {
            "username":uname,
            "password":pword
    }
    Khởi tạo headers với cấu trúc mặc định như sau, headers này để xác nhận chúng ta sử dụng JSON để truyền dữ liệu giữa client và server
    Code:
    headers = {"Content-Type" : "application/json"}
    Tạo URL( địa chỉ của server nhận requests). Ví dụ như : https://10.215.26.10/api/v1/ticket ( trong đó ip=địa chỉ ip của server Network Controller, ver= version của server ).
    Code:
    post_url = "https://"+APICEM_IP+"/api/"+VERSION+"/ticket"
    Kiểm tra trong phần try (do A) nếu có lỗi thì sẽ chuyển tới except và thực hiện các hành động trong đó (do B)
    Code:
    try:
          do A
    except:
           do B
    A ở đây cụ thể là :
    Code:
    r=requests.post(post_url,data = json.dumps(r_json), headers = headers,verify=False)
    r.raise_for_status()    # Lấy mã trạng thái, 200 là thành công, 404 là not found
    token = r.json()["response"]["serviceTicket"]
    return {
           "token" : token
    }
    Hàm trên ta thực hiện gửi request đến server và sẽ gán response của server vào biến r. Trong đó :
    • post là tạo dữ liệu .
    • post_url là địa chỉ ta muốn gửi đến,
    • json.dumps dùng để mã hóa username và password.
    • verify=False để không xác thực SSL
    • Sau khi nhận được respone, ta tạo biến token để lấy ticket từ r và return để trả về giá trị ticket
    B ở đây cụ thể là :
    Code:
    print("Status: %s" %r.status_code)
           print("Response: %s" %r.text)
    Để in giá trị ticket kết quả ra màn hình ta thêm vào đoạn code
    Code:
    ticket = get_ticket()
    print(ticket)
    Bước 3: Chạy chương trình

    Để chạy đoạn code vừa lập trình ta vào cmd nhập lệnh
    Code:
    Cd C://python
    Get-ticket.py
    Kiểm tra kết quả :



    Network Controller đã trả về ticket đã thành công.

    Sau khi đã lấy được ticket từ Controller, chúng ta có thể sử dụng ticket để thực hiện các thao tác get, post,... đến Controller. Ở bài Lab sau, mình sẽ hướng dẫn các bạn viết tiếp chương trình để có thể lấy được thông tin thiết bị, danh sách các thiết bị có trong mạng ,... Mong các bạn đón xem vào bài viết sau.

    Thank you.

    Full code :
    Code:
    import requests
    import json
    
    APICEM_IP = '10.215.26.10'
    VERSION = 'v1'
    USERNAME = 'admin'
    PASSWORD = 'VnPro@123'
    
    requests.packages.urllib3.disable_warnings()
    
    def get_ticket(ip=APICEM_IP,ver=VERSION,uname=USERNAME,pword=PASSWORD):
        r_json = {
            "username": uname,
            "password": pword
        }
        post_url = "https://"+ip+"/api/"+ver+"/ticket"
        headers = {"Content-Type" : "application/json"}
        try:
            r=requests.post(post_url,data = json.dumps(r_json),headers = headers,verify=False) 
            r.raise_for_status()
            token = r.json()["response"]["serviceTicket"]
            return {
                "token" : token
            }
        except:
            print("Status: %s" %r.status_code)
            print("Response: %s" %r.text)
    ticket=get_ticket()
    print(ticket)

    Nguồn : VNPRO
Working...
X