Rumah > Artikel > pembangunan bahagian belakang > Panduan untuk Tajuk Permintaan Python
Apabila berinteraksi dengan pelayan web, sama ada untuk mengikis web atau kerja API, pengepala permintaan Python ialah alat yang berkuasa tetapi sering diabaikan. Pengepala ini berkomunikasi secara senyap, memberitahu pelayan siapa yang memanggil, sebab dan dalam format apa data harus dikembalikan.
Dalam panduan ini, kami akan merangkumi semua yang anda perlu ketahui tentang menyediakan pengepala dengan pustaka permintaan Python, sebab pesanan pengepala penting dan cara memahami pengepala boleh meningkatkan kejayaan interaksi web anda.
Bagi mereka yang baru menggunakan perpustakaan, anda boleh mulakan dengan memasangnya dengan permintaan pemasangan pip untuk diikuti bersama panduan ini.
Dalam HTTP, pengepala ialah pasangan nilai kunci yang mengiringi setiap permintaan dan respons, membimbing pelayan tentang cara memproses permintaan. Pengepala menentukan jangkaan, format dan kebenaran, memainkan peranan penting dalam komunikasi pelayan-pelanggan. Sebagai contoh, pengepala boleh memberitahu pelayan tentang jenis peranti yang menghantar permintaan atau sama ada pelanggan menjangkakan respons JSON.
Setiap permintaan memulakan dialog antara klien (seperti penyemak imbas atau aplikasi) dan pelayan, dengan pengepala bertindak sebagai arahan. Pengepala yang paling biasa termasuk:
Pengepala boleh diurus dengan mudah menggunakan perpustakaan permintaan Python, membolehkan anda mendapatkan pengepala daripada respons atau menetapkan pengepala tersuai untuk menyesuaikan setiap permintaan.
Contoh: Mendapatkan Pengepala dengan Permintaan Python
Dalam Python permintaan untuk mendapatkan pengepala boleh dilakukan dengan response.headers.
import requests response = requests.get('https://httpbin.dev') print(response.headers) { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Content-Security-Policy": "frame-ancestors 'self' *.httpbin.dev; font-src 'self' *.httpbin.dev; default-src 'self' *.httpbin.dev; img-src 'self' *.httpbin.dev https://cdn.scrapfly.io; media-src 'self' *.httpbin.dev; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.httpbin.dev; style-src 'self' 'unsafe-inline' *.httpbin.dev https://unpkg.com; frame-src 'self' *.httpbin.dev; worker-src 'self' *.httpbin.dev; connect-src 'self' *.httpbin.dev", "Content-Type": "text/html; charset=utf-8", "Date": "Fri, 25 Oct 2024 14:14:02 GMT", "Permissions-Policy": "fullscreen=(self), autoplay=*, geolocation=(), camera=()", "Referrer-Policy": "strict-origin-when-cross-origin", "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", "X-Content-Type-Options": "nosniff", "X-Xss-Protection": "1; mode=block", "Transfer-Encoding": "chunked" }
Output menunjukkan pengepala yang dihantar semula oleh pelayan, dengan butiran seperti
Contoh: Menetapkan Pengepala Tersuai
Pengepala tersuai, seperti menambahkan Ejen Pengguna untuk emulasi peranti, boleh menjadikan permintaan kelihatan lebih tulen:
import requests response = requests.get('https://httpbin.dev') print(response.headers) { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Content-Security-Policy": "frame-ancestors 'self' *.httpbin.dev; font-src 'self' *.httpbin.dev; default-src 'self' *.httpbin.dev; img-src 'self' *.httpbin.dev https://cdn.scrapfly.io; media-src 'self' *.httpbin.dev; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.httpbin.dev; style-src 'self' 'unsafe-inline' *.httpbin.dev https://unpkg.com; frame-src 'self' *.httpbin.dev; worker-src 'self' *.httpbin.dev; connect-src 'self' *.httpbin.dev", "Content-Type": "text/html; charset=utf-8", "Date": "Fri, 25 Oct 2024 14:14:02 GMT", "Permissions-Policy": "fullscreen=(self), autoplay=*, geolocation=(), camera=()", "Referrer-Policy": "strict-origin-when-cross-origin", "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", "X-Content-Type-Options": "nosniff", "X-Xss-Protection": "1; mode=block", "Transfer-Encoding": "chunked" }
Persediaan ini membantu memastikan setiap permintaan kelihatan seperti penyemak imbas, mengurangkan peluang untuk mencetuskan langkah anti-bot. Dalam permintaan Python, menetapkan pengepala membolehkan anda mengawal interaksi dengan pelayan dengan tepat.
Soalan yang kerap berlaku apabila menggunakan pengepala permintaan Python ialah sama ada nama pengepala adalah sensitif huruf besar atau kecil.
Menurut spesifikasi HTTP/1.1, nama pengepala adalah tidak peka huruf besar-besaran, bermakna Jenis Kandungan, jenis kandungan dan JENIS KANDUNGAN semuanya setara. Walau bagaimanapun, berpegang kepada konvensyen penamaan standard seperti Content-Type dan bukannya sarung alternatif adalah amalan yang baik. Penyeragaman format membantu mengelakkan kekeliruan, terutamanya apabila menyepadukan dengan API pihak ketiga atau sistem yang mungkin mentafsir pengepala secara berbeza.
Apabila pelayan web menilai permintaan, butiran halus seperti sarung pengepala yang tidak konsisten boleh mendedahkan sifat pelanggan. Banyak penyemak imbas dan aplikasi yang sah mengikut konvensyen sarung khusus, seperti menggunakan huruf besar Jenis Kandungan. Bot atau skrip, bagaimanapun, mungkin tidak mengikut konvensyen ini secara seragam. Dengan menganalisis permintaan dengan selongsong tidak konvensional, pelayan boleh membenderakan atau menyekat bot yang berpotensi.
Dalam amalan, perpustakaan permintaan Python secara automatik mengendalikan normalisasi huruf besar untuk pengepala apabila menggunakan fungsi seperti pengepala set permintaan python. Ini bermakna tidak kira cara anda menulis nama pengepala, perpustakaan menukarnya kepada format piawai, memastikan keserasian dengan pelayan. Walau bagaimanapun, ambil perhatian bahawa walaupun nama pengepala itu sendiri tidak peka huruf besar-besaran, nilai pengepala (seperti "aplikasi/json" dalam Jenis Kandungan) masih boleh ditafsirkan secara literal dan harus diformatkan dengan tepat.
Dalam perpustakaan permintaan Python, anda boleh menetapkan pengepala dalam apa jua keadaan, dan pustaka akan mentafsirnya dengan betul:
headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get('https://httpbin.dev/headers', headers=headers) print(response.json()) { "headers": { "Accept": ["*/*"], "Accept-Encoding": ["gzip, deflate"], "Host": ["httpbin.dev"], "User-Agent": ["my-app/0.0.1"], "X-Forwarded-For": ["45.242.24.152"], "X-Forwarded-Host": ["httpbin.dev"], "X-Forwarded-Port": ["443"], "X-Forwarded-Proto": ["https"], "X-Forwarded-Server": ["traefik-2kvlz"], "X-Real-Ip": ["45.242.24.152"] }}
Seperti yang ditunjukkan di atas, permintaan menukar jenis kandungan secara automatik kepada Jenis Kandungan standard. Ini menunjukkan bahawa perpustakaan permintaan Python akan menormalkan nama pengepala untuk anda, mengekalkan keserasian dengan pelayan web tanpa mengira kes yang digunakan dalam kod asal.
Dalam kebanyakan interaksi API standard, susunan pengepala yang dihantar dengan panggilan pengepala permintaan Python tidak menjejaskan fungsi, kerana spesifikasi HTTP tidak memerlukan susunan khusus untuk pengepala. Walau bagaimanapun, apabila berurusan dengan sistem anti-bot dan anti-mengikis lanjutan, susunan pengepala boleh memainkan peranan penting yang tidak dijangka dalam menentukan sama ada permintaan diterima atau disekat.
Sistem anti-bot, seperti Cloudflare, DataDome dan PerimeterX, selalunya melangkaui pengesahan pengepala mudah dan menganalisis "cap jari" permintaan. Ini termasuk susunan pengepala dihantar. Pengguna manusia (melalui penyemak imbas) biasanya menghantar pengepala dalam susunan yang konsisten. Sebagai contoh, permintaan penyemak imbas biasanya mengikut perintah seperti Ejen Pengguna, Terima, Terima-Bahasa, Perujuk dan sebagainya. Sebaliknya, perpustakaan automasi atau pengikis mungkin menghantar pengepala dalam susunan yang berbeza atau menambah pengepala bukan standard, yang boleh berfungsi sebagai bendera merah untuk algoritma pengesanan.
Contoh: Pengepala Penyemak Imbas lwn. Pengepala Permintaan Python
Dalam penyemak imbas, anda mungkin melihat pengepala dalam susunan ini:
import requests response = requests.get('https://httpbin.dev') print(response.headers) { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Content-Security-Policy": "frame-ancestors 'self' *.httpbin.dev; font-src 'self' *.httpbin.dev; default-src 'self' *.httpbin.dev; img-src 'self' *.httpbin.dev https://cdn.scrapfly.io; media-src 'self' *.httpbin.dev; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.httpbin.dev; style-src 'self' 'unsafe-inline' *.httpbin.dev https://unpkg.com; frame-src 'self' *.httpbin.dev; worker-src 'self' *.httpbin.dev; connect-src 'self' *.httpbin.dev", "Content-Type": "text/html; charset=utf-8", "Date": "Fri, 25 Oct 2024 14:14:02 GMT", "Permissions-Policy": "fullscreen=(self), autoplay=*, geolocation=(), camera=()", "Referrer-Policy": "strict-origin-when-cross-origin", "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", "X-Content-Type-Options": "nosniff", "X-Xss-Protection": "1; mode=block", "Transfer-Encoding": "chunked" }
Dengan perpustakaan permintaan Python, pengepala mungkin kelihatan berbeza sedikit:
headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get('https://httpbin.dev/headers', headers=headers) print(response.json()) { "headers": { "Accept": ["*/*"], "Accept-Encoding": ["gzip, deflate"], "Host": ["httpbin.dev"], "User-Agent": ["my-app/0.0.1"], "X-Forwarded-For": ["45.242.24.152"], "X-Forwarded-Host": ["httpbin.dev"], "X-Forwarded-Port": ["443"], "X-Forwarded-Proto": ["https"], "X-Forwarded-Server": ["traefik-2kvlz"], "X-Real-Ip": ["45.242.24.152"] }}
Perbezaan sedikit dalam susunan pengepala ini boleh memberi petunjuk kepada sistem anti-bot bahawa permintaan itu mungkin diautomatikkan, terutamanya jika digabungkan dengan isyarat lain, seperti format Ejen Pengguna atau pengepala yang tiada.
Dengan menganalisis pesanan ini, sistem pengesanan lanjutan boleh mengenal pasti corak yang sering dikaitkan dengan skrip atau bot automatik. Apabila permintaan tidak sepadan dengan pesanan biasa, pelayan mungkin menganggap ia datang daripada bot, yang berpotensi mengakibatkan permintaan disekat atau cabaran captcha.
Apabila menyediakan pengepala permintaan Python untuk meniru permintaan penyemak imbas, adalah berguna untuk mengetahui pengepala mana yang standard dalam kebanyakan penyemak imbas web. Pengepala ini memberitahu pelayan tentang keupayaan dan pilihan pelanggan, menjadikan permintaan kelihatan lebih sah.
Pengepala standard meniru gelagat penyemak imbas, meningkatkan kejayaan permintaan. Tajuk utama termasuk:
Untuk memastikan permintaan meniru pelayar sebenar:
Alat Pembangun Penyemak Imbas :
Alat Proksi :
Contoh: Meniru Pengepala dalam Python
import requests response = requests.get('https://httpbin.dev') print(response.headers) { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Content-Security-Policy": "frame-ancestors 'self' *.httpbin.dev; font-src 'self' *.httpbin.dev; default-src 'self' *.httpbin.dev; img-src 'self' *.httpbin.dev https://cdn.scrapfly.io; media-src 'self' *.httpbin.dev; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.httpbin.dev; style-src 'self' 'unsafe-inline' *.httpbin.dev https://unpkg.com; frame-src 'self' *.httpbin.dev; worker-src 'self' *.httpbin.dev; connect-src 'self' *.httpbin.dev", "Content-Type": "text/html; charset=utf-8", "Date": "Fri, 25 Oct 2024 14:14:02 GMT", "Permissions-Policy": "fullscreen=(self), autoplay=*, geolocation=(), camera=()", "Referrer-Policy": "strict-origin-when-cross-origin", "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", "X-Content-Type-Options": "nosniff", "X-Xss-Protection": "1; mode=block", "Transfer-Encoding": "chunked" }
Permintaan ini menggunakan pengepala seperti penyemak imbas untuk menjadikan interaksi kelihatan lebih semula jadi. Dengan memerhatikan pengepala dan susunan pengepala daripada alatan penyemak imbas, anda boleh menyesuaikannya dalam Python untuk membuat permintaan anda sehampir mungkin dengan permintaan penyemak imbas sebenar.
Rentetan Ejen Pengguna memainkan peranan penting dalam cara pelayan bertindak balas terhadap permintaan. Ia mengenal pasti aplikasi, sistem pengendalian dan peranti yang membuat permintaan, membolehkan pelayan menyesuaikan respons mereka dengan sewajarnya.
Rentetan Ejen Pengguna biasanya dijana oleh penyemak imbas itu sendiri dan boleh berbeza-beza berdasarkan versi penyemak imbas, sistem pengendalian dan juga konfigurasi perkakasan.
Anda boleh mengetahui lebih lanjut tentang Cara Menggunakan Ejen Pengguna dengan Berkesan untuk Mengikis Web dalam artikel khusus kami:
(https://scrapfly.io/blog/user-agent-header-in-web-scraping/)
Apabila menggunakan pengepala permintaan Python dengan permintaan POST, pengepala memainkan peranan penting dalam cara pelayan mentafsir data yang dihantar oleh klien. Permintaan POST biasanya digunakan untuk menghantar data ke pelayan untuk mencipta, mengemas kini atau mengubah suai sumber, selalunya memerlukan pengepala tambahan untuk menjelaskan struktur, format dan tujuan data.
Content-Type : Menunjukkan format data, seperti application/json untuk data JSON, application/x-www-form-urlencoded untuk penyerahan borang atau multipart/form-data untuk fail. Menetapkan ini dengan betul memastikan pelayan menghuraikan data anda seperti yang dijangkakan.
Ejen Pengguna : Mengenal pasti aplikasi pelanggan, yang membantu dengan akses API dan dasar had kadar.
Keizinan : Diperlukan untuk titik akhir selamat untuk mengesahkan permintaan, selalunya menggunakan token atau bukti kelayakan.
Terima : Menentukan format respons yang diingini (mis., aplikasi/json), membantu dalam pengendalian data yang konsisten dan pemprosesan ralat.
Contoh Penggunaan Pengepala untuk Permintaan POST
Untuk menghantar data dalam format JSON, anda biasanya menetapkan pengepala Jenis Kandungan kepada aplikasi/json dan menghantar data sebagai JSON. Berikut ialah contoh dengan python meminta pengepala siaran untuk menghantar muatan JSON:
headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get('https://httpbin.dev/headers', headers=headers) print(response.json()) { "headers": { "Accept": ["*/*"], "Accept-Encoding": ["gzip, deflate"], "Host": ["httpbin.dev"], "User-Agent": ["my-app/0.0.1"], "X-Forwarded-For": ["45.242.24.152"], "X-Forwarded-Host": ["httpbin.dev"], "X-Forwarded-Port": ["443"], "X-Forwarded-Proto": ["https"], "X-Forwarded-Server": ["traefik-2kvlz"], "X-Real-Ip": ["45.242.24.152"] }}
Menggunakan pengepala siaran permintaan python dengan cara ini memastikan pelayan memproses data anda dengan betul dan mungkin menghalang permintaan daripada disekat.
Apabila pelayan menjangkakan trafik daripada pengguna sebenar, ia mungkin menyemak pengepala khusus penyemak imbas tertentu yang biasanya dihantar hanya oleh penyemak imbas web sebenar. Pengepala ini membantu mengenal pasti dan membezakan penyemak imbas daripada skrip automatik, yang amat penting apabila menavigasi perlindungan anti-bot pada tapak tertentu. Dengan mengkonfigurasi pengepala permintaan Python untuk meniru corak khusus penyemak imbas ini, anda boleh menjadikan permintaan anda kelihatan lebih seperti manusia, selalunya meningkatkan peluang permintaan yang berjaya.
DNT (Jangan Kesan): Memaklumkan pelayan tentang pilihan penjejakan pengguna (1 bermaksud "jangan jejak"), menjadikan permintaan lebih seperti pelayar.
Sec-Fetch-Site : Menunjukkan hubungan asal, dengan nilai seperti asal yang sama, merentas tapak dan tiada, membantu meniru konteks navigasi tulen.
Sec-Fetch-Mod : Mentakrifkan tujuan permintaan, seperti menavigasi untuk memuatkan halaman, menjadikannya berguna untuk mereplikasi tingkah laku penyemak imbas biasa.
Sec-Fetch-Dest : Menunjukkan jenis kandungan (dokumen, imej, skrip), berguna untuk meniru permintaan sumber tertentu.
Contoh Pengepala Khusus Penyemak Imbas dalam Permintaan Python:
Tetapkan pengepala khusus penyemak imbas apabila membuat permintaan menggunakan perpustakaan permintaan dalam Python.
import requests response = requests.get('https://httpbin.dev') print(response.headers) { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Content-Security-Policy": "frame-ancestors 'self' *.httpbin.dev; font-src 'self' *.httpbin.dev; default-src 'self' *.httpbin.dev; img-src 'self' *.httpbin.dev https://cdn.scrapfly.io; media-src 'self' *.httpbin.dev; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.httpbin.dev; style-src 'self' 'unsafe-inline' *.httpbin.dev https://unpkg.com; frame-src 'self' *.httpbin.dev; worker-src 'self' *.httpbin.dev; connect-src 'self' *.httpbin.dev", "Content-Type": "text/html; charset=utf-8", "Date": "Fri, 25 Oct 2024 14:14:02 GMT", "Permissions-Policy": "fullscreen=(self), autoplay=*, geolocation=(), camera=()", "Referrer-Policy": "strict-origin-when-cross-origin", "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload", "X-Content-Type-Options": "nosniff", "X-Xss-Protection": "1; mode=block", "Transfer-Encoding": "chunked" }
Dengan menyertakan pengepala ini, anda boleh membuat permintaan anda kelihatan lebih dekat dengan permintaan yang biasanya dihantar oleh penyemak imbas, mengurangkan kemungkinan dibenderakan sebagai bot atau menghadapi sekatan akses.
Pengesanan Anti-Bot : Pengepala khusus penyemak imbas membantu permintaan menyerupai trafik pengguna biasa, menjadikannya lebih sukar untuk sistem anti-bot membenderakannya.
Keserasian Dipertingkat : Sesetengah tapak menawarkan respons berbeza untuk permintaan seperti penyemak imbas, menjadikan pengepala ini berguna untuk tapak yang menyekat trafik bukan penyemak imbas.
Minta Ketulenan : Meniru gelagat penyemak imbas dengan pengepala ini boleh meningkatkan kadar kejayaan permintaan dengan mengurangkan peluang sekatan.
Apabila bekerja dengan pengepala permintaan Python, adalah penting untuk menggunakan pengepala yang sah dan diformat dengan betul. Banyak pelayan secara aktif memantau pengepala masuk untuk mengesan permintaan yang luar biasa atau tidak lengkap. Permintaan dengan pengepala yang tidak sah atau tiada—seperti Ejen Pengguna yang tiada, Jenis Kandungan yang ditetapkan secara tidak betul atau pengepala yang bercanggah—adalah isyarat biasa trafik automatik atau mencurigakan dan boleh membawa kepada penyekatan serta-merta.
Sebagai contoh, pengepala yang bercanggah antara satu sama lain, seperti mencampurkan Accept: text/html dengan Content-Type: application/json, boleh menyebabkan pelayan menolak permintaan anda, kerana gabungan ini tidak sejajar dengan gelagat penyemak imbas biasa.
Selain itu, sesetengah tapak web menggunakan alatan anti-bot berkuasa AI untuk meneliti pengepala dan menentukan ketidakkonsistenan seperti bot. Menguji pengepala untuk potensi isu paling baik dilakukan pada platform terkawal.
Petua praktikal untuk menetapkan pengepala, Seperti menggunakan Ejen Pengguna, memadankan Jenis Kandungan dan mengelakkan pengepala yang berlebihan membantu mengurangkan pengesanan dan meminimumkan penyekatan permintaan.
Mengambil langkah berjaga-jaga ini apabila menetapkan pengepala boleh meningkatkan kadar kejayaan permintaan anda dengan ketara dan membantu anda memintas sekatan yang berpotensi dengan berkesan.
Walaupun permintaan ialah pustaka klien HTTP yang berkuasa, ia bukanlah alat yang hebat untuk mengikis kerana ia sukar untuk diskalakan serta mudah dikenal pasti serta disekat.
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 pengepala permintaan python.
Pengepala menyampaikan maklumat tambahan dengan setiap permintaan, seperti jenis data yang dijangka, maklumat pelanggan dan butiran kebenaran. Ia penting untuk menyampaikan pilihan dan memastikan pelayan mengendalikan permintaan dengan betul.
Pengepala boleh membantu memintas pengesanan anti-bot, mengesahkan permintaan dan memastikan format data yang betul dalam respons. Menyesuaikan pengepala agar menyerupai permintaan penyemak imbas sebenar amat membantu untuk mengikis dan mengakses API terhad.
Menggunakan alat pembangun penyemak imbas, anda boleh memeriksa pengepala yang dihantar dengan setiap permintaan ke tapak web. Menyalin pengepala ini ke dalam permintaan Python anda boleh membantu permintaan anda meniru trafik penyemak imbas.
Bekerja dengan pengepala permintaan Python adalah penting untuk kedua-dua pengikisan web dan interaksi API. Memahami cara menetapkan, mendapatkan dan memanipulasi pengepala boleh membantu anda membuat permintaan yang lebih berkesan dan boleh dipercayai. Sama ada anda berurusan dengan permintaan GET atau POST, meniru pengepala penyemak imbas atau cuba mengelakkan pengesanan, cara anda mengendalikan pengepala boleh membuat atau memecahkan kejayaan mengikis anda.
Dengan mengikuti amalan terbaik, Seperti menggunakan pengepala standard, menetapkan nilai yang sesuai untuk permintaan POST dan memastikan susunan pengepala, permintaan anda akan lebih lengkap untuk menavigasi landskap kompleks perkhidmatan web moden.
Atas ialah kandungan terperinci Panduan untuk Tajuk Permintaan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!