Hướng dẫn python requests post json authentication - python yêu cầu đăng xác thực json
Tôi đang gặp sự cố khi sử dụng các yêu cầu API mà tôi đang kiểm tra cho biết tham số device_info sẽ được đăng trong thân thông báo. Nó cũng nói rằng Device_info dưới dạng trường biểu mẫu. Trong tất cả các tài liệu cho các yêu cầu, tôi không thể tìm cách thêm "tên" vào tham số khác ngoài việc tát tên với giá trị của nó trong JSON. Đây là những gì tôi đã thử.
Tôi đã thử thay đổi Câu trả lời mà tôi nhận được là:
EDITED: Nhận được một nơi mới! Tôi không có mã được sửa đổi để xem như sau:
Sản xuất:
Điều gì dường như là vấn đề? Tôi không gửi nó ở định dạng cần thiết? Đã chỉnh sửa: Giải pháp đã thay đổi các tham số của tôi thành: Khi tôi hiện đang làm việc trên một kịch bản mới sử dụng Python, tôi đã phải tìm một cách đơn giản nhưng hiệu quả để nói chuyện với API HTTP với các phản hồi của JSON. Hóa ra có một vài khả năng khác nhau, nhưng mô -đun "yêu cầu" dường như là một trong những cách phổ biến nhất và cũng dễ hiểu nhất để gửi các yêu cầu HTTP. Đơn giản nhận yêu cầuVới Curl, đây là yêu cầu cơ bản nhất mà bạn có thể làm:curl this is the most basic request you can do: $ Curl https://www.claudiokuenzler.comcurl https://www.claudiokuenzler.com Sử dụng Python: $ Python >>> Nhập yêu cầu >>> r = requests.get ('https://www.claudiokuenzler.com')python Biến "R" hiện giữ tất cả dữ liệu liên quan đến URL được yêu cầu. Bao gồm mã phản hồi HTTP: >>> in (R.Status_code) 200print(r.status_code) Bằng cách này, bạn có thể dễ dàng kiểm tra xem yêu cầu có thành công hay không. Hãy kiểm tra một trang không tìm thấy lỗi. Với Curl, bạn sẽ kiểm tra các tiêu đề của URL (Phương pháp nhanh nhất):curl you would check the headers of an URL (quickest method): $ Curl https://www.claudiokuenzler.com/nothinghere -ihttp/2 404 Máy chủ: nginxdate: Tue, 15 tháng 2 năm 2022 08:10:49 gmtcontent -type: text/html; Charset = ISO-8859-1Vary: Chấp nhận mã hóacurl
https://www.claudiokuenzler.com/nothinghere -I Sử dụng Python: $ Python >>> Nhập yêu cầu >>> r = requests.get ('https://www.claudiokuenzler.com')r=requests.get('https://www.claudiokuenzler.com/nothinghere') Biến "R" hiện giữ tất cả dữ liệu liên quan đến URL được yêu cầu. Bao gồm mã phản hồi HTTP:>>> in (R.Status_code) 200 Bằng cách này, bạn có thể dễ dàng kiểm tra xem yêu cầu có thành công hay không. Hãy kiểm tra một trang không tìm thấy lỗi.curl you would put the data payload into a parameter -d: Với Curl, bạn sẽ kiểm tra các tiêu đề của URL (Phương pháp nhanh nhất):curl -X POST -d '{"id": 1, "method": "Switch.GetStatus", "params": {"id": 0}}' http://api.example.com/rpc $ Curl https://www.claudiokuenzler.com/nothinghere -ihttp/2 404 Máy chủ: nginxdate: Tue, 15 tháng 2 năm 2022 08:10:49 gmtcontent -type: text/html; Charset = ISO-8859-1Vary: Chấp nhận mã hóa >>> r = requests.get ('https://www.claudiokuenzler.com/nothinghere') >>> if (r.status_code! = 200): ... & nbsp; & nbsp; in ("Xin lỗi, có gì đó không ổn") ... xin lỗi, có gì đó không ổnr=requests.post('http://api.example.com/rpc', data=somedata) Gửi yêu cầu bài đăng với tải trọng JSON Gửi một bài đăng sử dụng "Bài đăng" thay vì lớp "Nhận".r=requests.post('http://api.example.com/rpc', json={'key':'value','key2':'value2'}) Với Curl, bạn sẽ đặt tải trọng dữ liệu vào một tham số -D: $ curl -x post -d '{"id": 1, "phương thức": "switch.getstatus", "params": {"id": 0}}' http://api.example.com/rpcpostdata = { "id": 1, "method":
"Switch.GetStatus", "params": {"id": 0} } Trong các yêu cầu của Python, tải trọng dữ liệu có thể được xác định theo nhiều cách khác nhau. Mặc định là chỉ cần xác định tải trọng trong tham số dữ liệu: >>> r = requests.post ('http://api.example.com/rpc'. data = somedata)methodchoice="Switch.GetStatus" Nhưng khi chúng tôi đang gửi tải trọng JSON, có một tham số đặc biệt cho JSON: >>> r = requests.post ('http://api.example.com/rpc', json = {'key': 'value', 'key2': 'value2'}) Tất nhiên các trọng tải JSON có thể trở nên khá lớn, vì vậy thật hợp lý khi đặt tải trọng vào một biến riêng biệt trước khi thực sự gửi yêu cầu bài đăng:curl request looks like this: >>> postdata = {"id": 1, "phương thức": "switch.getstatus", "params": {"id": 0}} >>> r = requests.post ('http: // api. Ví dụ.com/rpc ', json = postdata)curl https://www.example.com/hidden.txt -u "myuser:secret" -I Và để làm cho nó trở nên năng động hơn, bạn cũng có thể sử dụng các biến trong tải trọng postdata: >>> r = requests.get ('https://www.example.com/hidden.txt', auth = ('myuser', 'secret')) >>> in (r.status_code) 200r=requests.get('https://www.example.com/hidden.txt', auth=('myuser', 'secret')) Để xử lý một phương thức xác thực khác, ví dụ Digest Auth, một lớp khác cần được tải với tham số Auth: >>> Phương thứcChoice = "Switch.getStatus" >>> postdata = {"id": 1, "Phương thức": MethodChoice, "params": {"id": 0}} >>> r = request.post (' http://api.example.com/rpc ', json = postdata, auth = httpdigestauth (' admin ',' secret ')) Traceback (cuộc gọi gần đây nhất cuối cùng): & nbsp; Tệp "", dòng 1, trong NameError: name 'httpdigestauth' không được xác địnhmethodchoice="Switch.GetStatus" WHOA, một lỗi cho thấy, xác thực HTTPDigestAuth không được tìm thấy/xác định. Để cho phép các phương thức xác thực bổ sung, chúng phải được tải (nhập) cụ thể: >>> Từ các yêu cầu >> r = requests.post ('http://api.example.com/rpc', json = postdata, auth = httpdigestauth ('admin', 'secret')) >>> in (r.status_code) 200from requests.auth import HTTPDigestAuth Mật khẩu sai sẽ dẫn đến 401 hoặc, tùy thuộc vào API, mã phản hồi 403: >>> Từ các yêu cầu >> r = requests.post ('http://api.example.com/rpc', json = postdata, auth = httpdigestauth ('admin', 'sraidpass')) >>> in (r.status_code) 401from requests.auth import HTTPDigestAuth Đọc và xử lý phản hồi JSONNhư bạn có thể đoán từ bài viết, mục tiêu của tôi là nói chuyện với API nhận đầu vào dữ liệu JSON và trả về đầu ra JSON. Trong Curl, bạn sẽ kết hợp đầu ra với trình phân tích cú pháp JSON, chẳng hạn như JQ, để có "chế độ xem đẹp" cho mắt người:curl you would combine the output with a json parser, such as jq, to have a "pretty view" for the human eye:
$ curl -x post -d '{"id": 1, "phương thức": "switch.getstatus", "params": {"id": 0}}' http://api.example.com/rpc - -anyAuth -u admin: Secret {"id": 1, "src": "shellypro4pm -xxx", "result": {"id": 0, "nguồn": "init", "in": true, " Apower ": 445.1," Điện áp ": 235,6," hiện tại ": 2.164," PF ":-0.27," AENERGY ": {" Tổng số ": 5297.006," BY_MINUTE ": [1139.782,7497.179.7637 : 1644915308}, "Nhiệt độ": {"TC": 49.8, "TF": 121.6}}}}curl -X POST -d '{"id": 1, "method": "Switch.GetStatus", "params": {"id": 0}}' http://api.example.com/rpc --anyauth -u admin:secret $ curl -s -x post -d '{"id": 1, "phương thức": "switch.getstatus", "params": {"id": 0}}' http://api.example.com/ RPC --anyAuth -u Quản trị viên: Bí mật | jq {& nbsp; "ID": 1, & nbsp; "SRC": "ShellyPro4pm-xxx", & nbsp; "Kết quả": {& nbsp; & nbsp; & nbsp; "id": 0, & nbsp; & nbsp; & nbsp; "Nguồn": "init", & nbsp; & nbsp; & nbsp; "đầu ra": Đúng, & nbsp; & nbsp; & nbsp; "Apower": 460.7, & nbsp; & nbsp; & nbsp; "Điện áp": 235, & nbsp; & nbsp; & nbsp; "hiện tại": 2.237, & nbsp; & nbsp; & nbsp; "PF": -0,26, & nbsp; & nbsp; & nbsp; "AENERGY": {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "Tổng số": 5300.551, & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "by_minute": [& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 4683.653, & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 7497.179, & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 7637.339 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ], & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "phút_ts": 1644915336 & nbsp; & nbsp; & nbsp; }, & nbsp; & nbsp; & nbsp; "Nhiệt độ": {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "TC": 49,9, & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "TF": 121.9 & nbsp; & nbsp; & nbsp; } & nbsp; }}curl -s -X POST -d '{"id": 1, "method": "Switch.GetStatus", "params": {"id": 0}}' http://api.example.com/rpc --anyauth -u admin:secret | jq Để xử lý điều này trong Python, mô -đun JSON có thể được sử dụng. Như chúng ta đã biết, phản hồi HTTP được lưu trong biến "R". Bằng cách chạy "R" thông qua hàm JSON và lưu nó trong một biến khác Jsondata, khóa và giá trị khác nhau sau đó có thể được sử dụng. Để xem các khóa và giá trị nào đã được phân tích cú pháp, hãy sử dụng hàm json.dumps trên biến jsondata: >>> Nhập JSON >>> Nhập yêu cầu >>> từ các yêu cầu. hay >> jsondata = r.json () >>> in (json.dumps (jsondata)) {"id": 1, "src": "shellypro4pm-xxx", "result": {"id": 0, " Nguồn ":" init "," đầu ra ": true," apower ": 454.5," điện áp ": 235.2," hiện tại ": 2.218," pf ": -0,27," aEngergy ": {" tổng số ": 5326.812," BY_MINUTE ": [385.795, 7667.42, 7639.309]," phút_ts ": 1644915542}," Nhiệt độ ": {" TC ": 49.6," TF ": 121.4}}}}}}}import json Để lấy một giá trị từ một khóa cụ thể, mảng jsondata hiện có thể được sử dụng: >>> in (jsondata ['src']) shellypro4pm-xxxprint(jsondata['src']) Để đi sâu hơn vào một đối tượng JSON lồng nhau, chỉ cần nối các mảng với tên đối tượng lồng nhau: >>> in (jsondata ['result'] ['AENERGY'] ['TOTAL']) 5326.812print(jsondata['result']['aenergy']['total']) >>> in (jsondata ['result'] ['nhiệt độ'] ['tc']) 49.6print(jsondata['result']['temperature']['tC']) Tất cả cái này là gì?Bạn có thể tự hỏi tại sao tôi đã vượt qua tất cả những điều này? Trên thực tế, tôi hiện đang làm việc trên một plugin giám sát mới để giám sát Shelly Power Switch và các thiết bị đo điện. Khi tôi quyết định sử dụng Python cho ngôn ngữ tập lệnh của plugin, tôi cần đào sâu hơn vào các yêu cầu HTTP (có và không có xác thực) và JSON xử lý trong Python. Trình giám sát plugin Check_shelly sẽ được xuất bản trên blog này khi sẵn sàng. Kho lưu trữ công cộng có thể được tìm thấy trên GitHub. Thêm một bình luậnHiển thị biểu mẫu để lại nhận xét Nhận xét (mới nhất đầu tiên)Chưa có nhận xét nào. |
Bài Viết Liên Quan
Chuyển pdf sang excel online
Không ai khác cung cấp một phần mềm chuyển đổi có thể truy cập và nhanh chóng như của chúng tôi. Công cụ chuyển đổi PDF sang XLS trực tuyến của chúng tôi ...
Cách tốt nhất để học Python miễn phí về khoa học dữ liệu
Mức độ phổ biến của Python không ngừng tăng lên, chủ yếu là do nó được sử dụng trong các công nghệ mới nổi như khoa học dữ liệu, học máy và trí tuệ ...
Python yêu cầu json thành chuỗi
❮ Mô-đun Yêu cầuThí dụGửi yêu cầu tới một trang web và trả về mã trạng tháiyêu cầu nhập khẩux = yêu cầu. nhận (https. //w3schools. com)print(x. ...
Làm cách nào để loại bỏ các giá trị ngoại lệ khỏi nhiều cột trong python?
Trong toàn bộ khung dữ liệu của tôi, tôi có hai cột giá và số lượng. Cả hai đều chứa ngoại lệ. Làm cách nào tôi có thể xóa các giá trị ngoại lệ trong ...
Will there be a Dubai Expo 2023
Mỗi phòng đều được trang bị để phục vụ công việc và thư giãn với Wi-Fi tốc độ cao miễn phí, góc làm việc tiện dụng và TV màn hình phẳng 32 inch theo ...
Mysql phân biệt chữ hoa chữ thường
Nếu tôi cố gắng chèn 3 giá trị trên, sẽ báo lỗi (ràng buộc UNIQUE KEY XXXXXXXX. Không thể chèn khóa trùng lặp vào đối tượng)Yêu cầu của tôi là coi 3 giá ...
Dịch ngoại tuyến python
Python là một ngôn ngữ lập trình mạnh mẽ, dễ học. Nó có cấu trúc dữ liệu cấp cao hiệu quả và cách tiếp cận đơn giản nhưng hiệu quả đối với lập ...
Tôi có thể học Python nếu tôi biết C không?
Nếu bạn không phải là dân lập trình, Python có thể là điểm khởi đầu của bạn vì nó nằm trong top ngôn ngữ lập trình hàng đầu của danh sách năm 2022 và ...
Tôi có thể sử dụng JavaScript trong Power Automate không?
Power Automate đã trở thành một công cụ thiết yếu cho nhà phát triển Microsoft 365. Tuy nhiên, tất cả việc thực thi logic đơn giản quá thường xuyên có thể trở ...
2023 Nissan Z convertible
Corvette Z06 C8 2023 là siêu xe chính hiệu của Mỹ. Lần nhận huy hiệu Z06 mới nhất giảm 6. LT2 V-8 2 lít từ Corvette động cơ đặt giữa cơ sở để tạo ra một ...
Làm cách nào để đặt mật khẩu cho cơ sở dữ liệu mysql?
Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách thay đổi mật khẩu người dùng MySQL bằng nhiều câu lệnh khác nhau, chẳng hạn như câu lệnh USE ...
Cách kiểm tra thời gian hết hạn phiên trong PHP
Trong ví dụ này, chúng tôi sẽ giả định rằng bạn muốn hết hạn phiên của người dùng sau 30 phút không hoạt độngThật không may, với PHP, bạn sẽ phải hết ...
Bạn có thể viết mã javascript trong nút js không?
Để theo dõi khóa học này, bạn cần biết cách thức và nơi bạn chạy mã JavaScript của mình. Bạn có một số tùy chọn để chạy chương trình chào thế giới ...
Lỗi không tìm thấy mô-đun không thể giải quyết Reac-html-parser
Phân tích sâu hơn về trạng thái bảo trì của trình phân tích cú pháp react-html dựa trên nhịp phiên bản npm đã phát hành, hoạt động của kho lưu trữ và các ...
Nhận dữ liệu từ Google Sheets API
Google Trang tính, một phần của Google Workspace, cho phép các nhóm tạo và chia sẻ bảng tính trực tuyến, đồng thời đã phát triển thành một công cụ kinh doanh ...
Làm cách nào để kiểm tra xem một chuỗi có chứa bảng chữ cái trong python không?
Phương thức chuỗi isalpha() của Python trả về True nếu mỗi ký tự trong chuỗi đã cho chỉ là một chữ cái trong bảng chữ cái (a-zA-Z)Nếu chuỗi chứa một hoặc ...
Lặp lại từ điển Python
Cuối cùng, bạn cũng sẽ thấy cách lặp lại cả khóa và giá trị của một từ điển, sau đó lưu kết quả vào một từ điển mớiVí dụ về lặp qua từ điển ...
Mẫu excel mua hàng
Chào mừng bạn đến với trungcapluatvithanh. giáo dục. vn trong bài viết về Cách tạo danh sách trong excel chúng tôi sẽ chia sẻ kinh nghiệm chuyên sâu của mình cung ...
2023 TUT có những khóa học nào?
TUT cung cấp hơn 400 lựa chọn nghề nghiệp, thu hút hơn 60 000 sinh viên hàng năm. Ngoài việc có những bộ óc học thuật tốt nhất từ khắp nơi trên ...
WordPress 6 sử dụng phiên bản PHP nào?
Một trong những lý do đằng sau sự phổ biến lâu dài của WordPress là bản chất mã nguồn mở của nó. Nhưng điều gì làm cho WordPress trở thành một nền tảng ...