Menggunakan IP proksi dalam Python Requests
Tetapkan laluan proksi secara nyata bagi setiap permintaan dalam Requests, pilih skema titik akhir yang betul dan kendalikan tamat masa serta kegagalan terowong HTTPS.
Apabila Requests tersedia dalam projek, berikan pemetaan proksi kepada panggilan:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Gantikan titik akhir gelung balik dengan proksi anda yang berjalan atau calon daripada senarai proksi HTTP yang akan diuji melalui permintaan ini. Kekunci menerangkan skema destinasi: http untuk URL HTTP dan https untuk URL HTTPS. Nilai menerangkan pendengar proksi. Titik akhir boleh berbeza jika rangkaian memerlukan laluan berasingan.
Nilai proksi http:// di bawah kekunci https adalah disengajakan. Requests meminta terowong CONNECT daripada pendengar HTTP, kemudian membentuk TLS dengan destinasi melaluinya, tertakluk pada dasar destinasi dan port proksi. Mengubah nilai kepada https:// meminta TLS kepada proksi itu sendiri; ia boleh gagal jika pendengar menjangkakan HTTP tanpa penyulitan.
Maksud dua nombor tamat masa
timeout=(5, 15) menetapkan had masa sambungan dan bacaan. Ia tidak mengenakan tempoh keseluruhan lima belas saat. Data yang tiba berkala, berbilang alamat dan percubaan sambungan boleh memanjangkan masa berlalu. Requests tidak menyediakan had masa umum jika tetapan ini ditinggalkan; pilih had yang sesuai dengan respons dan tambah tarikh akhir pada peringkat aplikasi jika tugas memerlukan bajet masa keseluruhan yang ketat.
Kendalikan kegagalan pada peringkat ia berlaku
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
CONNECT yang ditolak boleh menghasilkan ProxyError sebelum respons destinasi wujud. Cabang HTTPError menyusuli respons diterima dengan status ralat; Timeout bermaksud had yang dikonfigurasi telah tamat. Periksa rantaian pengecualian pembentukan sambungan secara setempat, dan buang titik akhir yang mengandungi kelayakan serta URL peribadi sebelum berkongsi.
Biarkan pengesahan sijil diaktifkan. Jika rangkaian yang dibenarkan menggunakan CA peribadi atau pemintasan terurus, sediakan bahan kepercayaan yang dijangka dan bukannya melumpuhkan pengesahan.
Entri nyata bagi setiap permintaan mengawal laluan yang dibekalkan di sini, tetapi skema yang tidak dinyatakan masih boleh dipengaruhi penemuan proksi daripada persekitaran. Apabila memindahkan panggilan ke Session boleh guna semula, tentukan cara pemboleh ubah persekitaran, lalai Session dan penggantian setiap permintaan berinteraksi; penggunaan semula sambungan dan dasar penghalaan ialah pilihan berasingan.