Pustaka permintaan Python ialah alat perpustakaan klien http yang berkuasa dan memudahkan komunikasi API, terutamanya untuk membuat permintaan POST. Sama ada anda sedang membina aplikasi yang berinteraksi dengan API jauh atau mengikis web, menguasai kaedah POST dengan permintaan ialah kemahiran asas untuk pembangunan web yang cekap.
Panduan ini menyediakan panduan menyeluruh menggunakan permintaan Python untuk membuat permintaan POST, kaedah penting untuk menghantar data ke pelayan. Kami akan merangkumi contoh, cabaran biasa dan amalan terbaik.
Bagi mereka yang baru menggunakan perpustakaan, anda boleh mulakan dengan memasangnya dengan permintaan pemasangan pip untuk diikuti bersama panduan ini.
HTTP ialah tulang belakang komunikasi antara klien web (seperti penyemak imbas atau aplikasi) dan pelayan. Protokol ini menggunakan permintaan untuk menukar data dan mungkin terdapat pelbagai jenis kaedah:
Menggunakan permintaan POST dalam Python adalah penting untuk interaksi yang menghantar data ke pelayan dan mungkin terdapat banyak kes penggunaan untuk kaedah ini — mari kita lihat seterusnya.
Memahami masa untuk menggunakan POST berbanding kaedah HTTP lain adalah kunci dalam pembangunan web. Tidak seperti GET, yang menghantar data sebagai sebahagian daripada parameter URL terhad, POST menghantar data melalui badan permintaan. Ini membolehkan untuk menampung muatan yang lebih besar dan menyembunyikan data untuk keselamatan. Ini menjadikan kaedah POST sesuai untuk:
Dengan pemahaman yang jelas tentang permintaan POST, mari kita terokai cara menghantarnya dalam Python menggunakan perpustakaan permintaan, meliputi format penting seperti JSON, data borang dan muat naik fail.
Fungsi requests.post() ialah alat utama anda untuk menghantar permintaan POST dalam Python. Ia membenarkan penghantaran data yang boleh disesuaikan dan mudah dengan menyatakan URL, pengepala dan data itu sendiri. Jenis data yang paling biasa termasuk JSON, data borang atau data badan mentah, semuanya dikendalikan dengan mudah dengan kaedah POST permintaan python. Contohnya:
Permintaan python asas contoh siaran untuk menghantar permintaan POST:
import requests response = requests.post('https://httpbin.dev/post', data={'key': 'value'}) # or start a persisten session: session = requests.Session() response = session.post('https://httpbin.dev/post', data={'key': 'value'}) # Check response content print(response.status_code) print(response.text)
Menggunakan requests.Session() membolehkan anda mengekalkan parameter tertentu (seperti kuki atau pengepala) merentas berbilang permintaan. Ini boleh menjadi penting apabila bekerja dengan permintaan POST kerana selalunya pelayan menjejaki keadaan klien semasa dan boleh mengembalikan data yang berbeza atau malah menyekat permintaan POST yang tiada pengepala atau kuki tertentu.
Pengepala Jenis Kandungan HTTP adalah penting dalam permintaan POST kerana ia menentukan format data yang dihantar, yang memastikan pelayan boleh mentafsir permintaan dengan betul.
Sesetengah pelayan menyokong berbilang jenis kandungan POST, manakala yang lain memerlukan format khusus. Berikut ialah beberapa pengepala Jenis Kandungan biasa dan kegunaannya:
Untuk menetapkan pengepala Jenis Kandungan dalam permintaan python gunakan parameter pengepala:
import requests response = requests.post( 'https://httpbin.dev/post', headers={ "Content-Type": "application/json", }, data='{ "key": "value" }' )
Dengan itu, mari kita lihat format data yang paling biasa digunakan dalam permintaan POST seterusnya.
JSON (JavaScript Object Notation) ialah format yang biasa digunakan untuk komunikasi API kerana ia mudah distruktur dan dihuraikan. Ia tersedia secara asli dalam JavaScript dan dalam Python ia boleh dihantar dengan mudah ke kamus Python menggunakan modul json.
Menggunakan perpustakaan permintaan menghantar permintaan Python POST dengan data JSON adalah mudah. Gunakan parameter json dalam requests.post(), yang secara automatik mengendalikan pengekodan dan menetapkan pengepala Content-Type:
import requests response = requests.post('https://httpbin.dev/post', data={'key': 'value'}) # or start a persisten session: session = requests.Session() response = session.post('https://httpbin.dev/post', data={'key': 'value'}) # Check response content print(response.status_code) print(response.text)
JSON ialah jenis data POST yang paling popular yang sering ditemui dalam senario seperti:
Data Borang digunakan apabila pengguna berinteraksi dengan medan input pada halaman web seperti:
Data borang menghantar data dengan aplikasi pengepala Jenis Kandungan/x-www-form-urlencoded dan data pengekodan URL dalam format nilai kunci. Mari lihat contoh cara MENYATAKAN Data Borang dengan Permintaan Python untuk lebih memahami format ini:
import requests response = requests.post( 'https://httpbin.dev/post', headers={ "Content-Type": "application/json", }, data='{ "key": "value" }' )
Dalam contoh di atas, pengepala Jenis Kandungan ditetapkan secara automatik apabila kami menggunakan kamus python sebagai parameter data. Jika tidak, jika kita menghantar rentetan, kita perlu menetapkan pengepala Jenis Kandungan secara manual.
Untuk menghantar fail menggunakan perpustakaan permintaan Python, parameter fail boleh digunakan. Parameter ini mengambil data bait dan secara automatik menetapkan pengepala Jenis Kandungan kepada berbilang bahagian/data bentuk. Ini berguna untuk memuat naik imej, dokumen atau kandungan media. Mari kita lihat beberapa contoh cara memuat naik fail menggunakan permintaan Python POST:
import requests data = {'username': 'ziad', 'password': '1234'} response = requests.post('https://httpbin.dev/api', json=data)
Di atas, kami melihat bahawa kami boleh menyediakan objek fail untuk permintaan menstrim data ke pelayan atau menyediakan data bait secara langsung.
Selepas membuat permintaan POST adalah amalan yang baik untuk mengesahkan respons untuk ralat atau nota meta. Untuk itu, objek Respons permintaan menyediakan atribut seperti status_code, header dan json() yang membantu menilai kejayaan atau mendiagnosis isu.
Untuk bermula, periksa response.status_code untuk mengesahkan sama ada permintaan POST berjaya dibuat dengan respons 200 OK. Jika tidak, rujuk jadual berguna ini di bawah.
Status Code | Issue | Description | Solution |
---|---|---|---|
400 Bad Request | Incorrect data or syntax error | The server couldn't process the request due to data format issues. | Check the data format and headers (e.g., Content-Type) for correctness. |
401 Unauthorized | Missing or invalid authentication | The request lacks valid authentication credentials. | Include valid API keys or tokens in headers. |
403 Forbidden | Access denied | The server refuses to authorize the request. | Verify permissions and check the API documentation for access requirements. |
404 Not Found | Incorrect URL | The server cannot find the requested endpoint. | Double-check the endpoint URL for typos and ensure it’s valid. |
405 Method Not Allowed | Unsupported HTTP method | The endpoint does not support the HTTP method used. | Confirm the correct HTTP method is used by consulting the API documentation. |
500 Internal Server Error | Server-side error | A generic error indicating an internal server issue. | Retry the request; contact API support if the issue persists. |
503 Service Unavailable | Temporary overload/maintenance | The server is temporarily unavailable due to high traffic or maintenance. | Wait and retry later; consider implementing retry logic for critical applications. |
Dengan memantau response.status_code dan menggabungkan logik pengendalian ralat, anda boleh memastikan interaksi yang mantap dan boleh dipercayai apabila membuat permintaan POST.
Berikut ialah contoh cara mengendalikan kod status respons:
import requests response = requests.post('https://httpbin.dev/post', data={'key': 'value'}) # or start a persisten session: session = requests.Session() response = session.post('https://httpbin.dev/post', data={'key': 'value'}) # Check response content print(response.status_code) print(response.text)
Mengetahui cara mentafsir respons ini membantu menangani ralat dengan berkesan, memastikan pengalaman pengguna yang lancar dan menyelesaikan masalah dalam interaksi API.
Untuk mengoptimumkan lebar jalur pemindahan data, anda boleh POST data mampat Gzip atau Brotli. Berikut ialah contoh pemampatan gzip:
import requests response = requests.post( 'https://httpbin.dev/post', headers={ "Content-Type": "application/json", }, data='{ "key": "value" }' )
Untuk pemampatan Brotli pakej brotli boleh digunakan:
import requests data = {'username': 'ziad', 'password': '1234'} response = requests.post('https://httpbin.dev/api', json=data)
Menggunakan mampatan mengurangkan saiz muatan dengan ketara mengoptimumkan lebar jalur dan meningkatkan kelajuan permintaan. Ini terpakai terutamanya pada format seperti JSON yang boleh dimampatkan dengan baik.
Permintaan POST, terutamanya yang melibatkan set data yang besar atau volum yang tinggi, boleh menjadi perlahan disebabkan oleh masa yang diperlukan untuk penghantaran data dan pemprosesan bahagian pelayan. Concurrency boleh mengurangkan kelewatan ini dengan membenarkan berbilang permintaan dijalankan serentak, mempercepatkan tugas seperti muat naik data pukal atau interaksi API.
Malangnya, perpustakaan permintaan Python tidak menyokong operasi tak segerak dengan asyncio, mengehadkan keupayaannya untuk mengendalikan banyak permintaan POST serentak dengan cekap.
Di sinilah httpx masuk, kerana ia menawarkan AsyncClient yang berintegrasi dengan lancar dengan gelung acara asyncio Python. Ini bermakna anda boleh menghantar banyak permintaan serentak tanpa menyekat, menjadikan httpx pilihan yang hebat untuk aplikasi berprestasi tinggi yang memerlukan sokongan async sebenar.
Sebagai alternatif, anda boleh menggunakan threading untuk mendayakan permintaan selari dalam permintaan Python. Berikut ialah contoh menggunakan pakej benang terbina dalam dengan permintaan:
form_data = {'search': 'product 1 & 2', 'count': 10} response = requests.post( 'https://httpbin.dev/post', data=form_data, ) # this will automatically add the Content-Type header # and convert data from dictionary to URL encoded format print(response.request.body) 'search=product+1+%26+2&count=10' print(response.request.headers['Content-Type']) 'application/x-www-form-urlencoded' # alternatively if we POST data as string # we need to manually identify Content-Type response = requests.post( 'https://httpbin.dev/post', data='search=product+1+%26+2&count=10' headers={ "Content-Type": "application/x-www-form-urlencoded" } ) print(response.request.body) 'search=product+1+%26+2&count=10' print(response.request.headers['Content-Type']) 'application/x-www-form-urlencoded'
Dengan menggunakan threading, berbilang permintaan POST boleh dilancarkan secara selari, membolehkan setiap thread mengendalikan satu permintaan.
Anda boleh mengetahui lebih lanjut tentang Concurrency vs Parallelism dalam artikel khusus kami:
Keselarasan lwn Paralelisme
(https://scrapfly.io/blog/concurrency-vs-parallelism/)
Permintaan HTTP boleh menjadi sukar dan menjadi rumit dengan cepat dengan keperluan penyemak imbas tanpa kepala atau penyekatan pelanggan. Untuk itu, Scrapfly boleh membantu anda!
ScrapFly menyediakan API pengikisan, tangkapan skrin dan pengekstrakan web untuk pengumpulan data secara berskala.
Untuk melengkapkan panduan ini, berikut ialah jawapan kepada beberapa soalan lazim tentang permintaan python POST.
Luluskan pengepala sebagai kamus menggunakan parameter pengepala. Harap maklum bahawa permintaan menjana beberapa pengepala secara automatik seperti Ejen Pengguna, Panjang Kandungan dan Jenis Kandungan, jadi berhati-hati apabila mengatasinya.
data adalah untuk dikodkan borang (lalai) atau data mentah (apabila pengepala Jenis Kandungan ditindih). Walaupun json khusus untuk data format JSON dan secara automatik menetapkan Content-Type kepada aplikasi/json.
Malangnya, perpustakaan permintaan tidak menyokong permintaan tak segerak. Walau bagaimanapun, perpustakaan httpx ialah alternatif yang menyediakan keupayaan async, menjadikannya sesuai untuk aplikasi yang memerlukan keselarasan.
Dalam artikel ini kami telah melihat secara mendalam kaedah POST permintaan dalam Python dan mempelajari:
Terdapat banyak lagi yang perlu dipelajari tentang permintaan Python dan permintaan POST, tetapi dengan panduan ini, anda dilengkapi dengan baik untuk mula membina aplikasi teguh dan pengikis web yang berinteraksi dengan API dan pelayan dengan berkesan.
Atas ialah kandungan terperinci Panduan untuk permintaan Python kaedah POST. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!