Saya ingin menggunakan layanan web berbasis SOAP WSDL dengan Python. Saya telah melihat kode Dive Into Python tetapi modul SOAPpy tidak berfungsi dengan Python 2.5.
Saya telah mencoba menggunakan busa yang berfungsi sebagian, tetapi rusak dengan jenis tertentu (suds.TypeNotFound: Type not found: 'item').
Saya juga telah melihat Klien tetapi tampaknya ini tidak mendukung WSDL.
Dan saya telah melihat ZSI tetapi terlihat sangat kompleks. Apakah ada yang punya kode sampel untuk itu?
WSDL adalah https://ws.pingdom.com/soap/PingdomAPI.wsdl dan berfungsi dengan baik dengan klien SOAP PHP 5.
python
web-services
soap
davidmytton
sumber
sumber
Jawaban:
Saya akan merekomendasikan agar Anda melihat SUDS
"Suds adalah klien python SOAP yang ringan untuk menggunakan Layanan Web."
sumber
Ada perpustakaan yang relatif baru yang sangat menjanjikan dan meskipun masih kurang terdokumentasi, tampaknya sangat bersih dan pythonic: python zeep .
Lihat juga jawaban ini sebagai contoh.
sumber
Saya baru-baru ini tersandung pada masalah yang sama. Inilah sinopsis solusi saya:
Diperlukan blok kode konstituen dasar
Berikut ini adalah blok kode dasar yang diperlukan dari aplikasi klien Anda
Modul apa yang Anda butuhkan?
Banyak yang menyarankan untuk menggunakan modul Python seperti urllib2; Namun, tidak ada modul yang berfungsi-setidaknya untuk proyek khusus ini.
Jadi, berikut adalah daftar modul yang perlu Anda dapatkan. Pertama-tama, Anda perlu mengunduh dan menginstal suds versi terbaru dari tautan berikut:
Selain itu, Anda perlu mengunduh dan menginstal permintaan dan modul suds_requests dari tautan berikut masing-masing (pelepasan tanggung jawab: Saya baru memposting di sini, jadi saya tidak dapat memposting lebih dari satu tautan untuk saat ini).
Setelah Anda berhasil mengunduh dan menginstal modul ini, Anda siap untuk melanjutkan.
Kode
Mengikuti langkah-langkah yang diuraikan sebelumnya, kode tersebut terlihat seperti berikut ini: Impor:
Permintaan sesi dan otentikasi:
Buat Klien:
Tambahkan WS-Security Header:
Harap dicatat bahwa metode ini membuat tajuk keamanan yang digambarkan pada Gambar 1. Jadi, penerapan Anda mungkin berbeda-beda bergantung pada format header keamanan yang benar yang disediakan oleh pemilik layanan yang Anda gunakan.
Gunakan metode (atau operasi) yang relevan:
Logging :
Salah satu praktik terbaik dalam implementasi seperti ini adalah pencatatan untuk melihat bagaimana komunikasi dijalankan. Jika ada masalah, ini membuat debugging menjadi mudah. Kode berikut melakukan logging dasar. Namun, Anda dapat mencatat banyak aspek komunikasi selain yang digambarkan dalam kode.
Hasil:
Inilah hasil dalam kasus saya. Perhatikan bahwa server mengembalikan HTTP 200. Ini adalah kode sukses standar untuk respons permintaan HTTP.
sumber
suds_request
akan gagal saat menginstal, jadi jika Anda menggunakansuds-jurko
fork, Anda dapat menginstalsuds_request
yang telah disesuaikan untuk bekerja dengan suds versi jurko:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
Saat ini (pada 2008), semua perpustakaan SOAP tersedia untuk Python menyedot. Saya sarankan menghindari SOAP jika memungkinkan. Terakhir kali kami dipaksa untuk menggunakan layanan web SOAP dari Python, kami menulis pembungkus dalam C # yang menangani SOAP di satu sisi dan mengeluarkan COM di sisi lain.
sumber
Zeep adalah pustaka SOAP yang layak untuk Python yang cocok dengan apa yang Anda minta: http://docs.python-zeep.org
sumber
Saya secara berkala mencari jawaban yang memuaskan untuk ini, tetapi sejauh ini tidak berhasil. Saya menggunakan permintaan soapUI + + tenaga kerja manual.
Saya menyerah dan menggunakan Java terakhir kali saya perlu melakukan ini, dan menyerah beberapa kali terakhir kali saya ingin melakukan ini, tetapi itu tidak penting.
Setelah berhasil menggunakan pustaka permintaan tahun lalu dengan API RESTful Project Place, terpikir oleh saya bahwa mungkin saya bisa langsung menggulung permintaan SOAP yang ingin saya kirim dengan cara yang sama.
Ternyata bahwa tidak terlalu sulit, tetapi adalah memakan waktu dan rawan kesalahan, terutama jika bidang yang tidak konsisten bernama (yang saya sedang mengerjakan saat ini memiliki 'jobId', JobId' dan 'JobID'. Saya menggunakan soapUI ke beban WSDL untuk mempermudah mengekstrak titik akhir dll dan melakukan beberapa pengujian manual Sejauh ini saya beruntung tidak terpengaruh oleh perubahan pada WSDL yang saya gunakan.
sumber
Ini tidak benar SOAPpy tidak bekerja dengan Python 2.5 - ini bekerja, meskipun sangat sederhana dan sangat, sangat mendasar. Jika Anda ingin berbicara dengan layanan web yang lebih rumit, ZSI adalah satu-satunya teman Anda.
Demo yang sangat berguna yang saya temukan ada di http://www.ebi.ac.uk/Tools/webservices/tutorials/python - ini sangat membantu saya untuk memahami cara kerja ZSI.
sumber
Jika Anda menggulirkan milik Anda sendiri, saya sangat merekomendasikan melihat http://effbot.org/zone/element-soap.htm .
sumber
SOAPpy sekarang sudah usang, AFAIK, digantikan oleh ZSL. Ini adalah poin yang bisa diperdebatkan, karena saya tidak bisa mendapatkan salah satunya untuk bekerja, apalagi mengkompilasi, pada Python 2.5 atau Python 2.6
sumber
sumber