របៀបប្រើប្រាស់ proxy ក្នុង Python Requests (HTTP/HTTPS & Session pooling)
Updated:
បណ្ណាល័យ requests របស់ Python គាំទ្រ VinaProxy proxy ដែលមានការផ្ទៀងផ្ទាត់តាមរយៈ dictionary proxies ដោយភ្ជាប់ទាំង scheme 'http' និង 'https' ទៅកាន់ http://user:pass@ip:port។ ការភ្ជាប់ dictionary នោះទៅកាន់ requests.Session() ដែលមានស្រាប់ នឹងប្រើប្រាស់ TCP socket ឡើងវិញ ដើម្បីធ្វើ web scraping បានលឿន និងកាត់បន្ថយការប្រើប្រាស់ធនធាន។
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 IP40,000₫
- 5+ IP35,000₫
- 10+ IP25,000₫
- 20+ IP25,000₫
- 50+ IP25,000₫
- 100+ IP25,000₫
- 200+ IP25,000₫
- 500+ IP25,000₫
- 1000+ IP22,000₫
- 2000+ IP20,000₫
- 1 IP40,000₫
- 5+ IP35,000₫
- 10+ IP25,000₫
- 20+ IP25,000₫
- 50+ IP25,000₫
- 100+ IP25,000₫
- 200+ IP25,000₫
- 500+ IP25,000₫
- 1000+ IP22,000₫
- 2000+ IP20,000₫
ទម្រង់នៃ proxies dictionary & ការប្រើប្រាស់ Sessions ឡើងវិញ
ការហៅ requests.get() លើគ្រប់ URL នឹងបង្កើតការតភ្ជាប់ TCP ថ្មី និង TLS handshake រាល់ពេល។ ការភ្ជាប់ proxy របស់អ្នកទៅ session = requests.Session() នឹងរក្សា proxy tunnel ឱ្យបើកចំហរាល់ការស្នើសុំបន្តបន្ទាប់។
| ប៉ារ៉ាម៉ែត្រ Requests | Syntax ដែលណែនាំ | គោលបំណងបច្ចេកទេស |
|---|---|---|
Key 'http' | 'http://user:pass@ip:port' | បញ្ជូនសំណើ HTTP ធម្មតាតាមរយៈ proxy |
Key 'https' | 'http://user:pass@ip:port' | ប្រើ scheme http:// ដើម្បីឱ្យ urllib3 បង្កើត HTTP CONNECT tunnel សម្រាប់ TLS |
Tuple timeout | timeout=(5, 15) | connect timeout រយៈពេល 5s និង read timeout រយៈពេល 15s ការពារកុំឱ្យ worker threads គាំង |
| ការបង្វិល Pool | itertools.cycle(proxy_list) | បង្វិលស្មើគ្នានៅទូទាំង dedicated static IP pool របស់អ្នក |
ការជៀសវាងកំហុសទូទៅលើ urllib3 & ProxyError
- តែងតែប្រើ
http://(មិនមែនhttps://) ជា proxy URL scheme សម្រាប់ទាំង key dictionary'http'និង'https'លើកលែងតែ proxy port របស់អ្នកតម្រូវឱ្យប្រើ TLS-over-TLS ច្បាស់លាស់ - ធ្វើ URL-encode តួអក្សរពិសេសក្នុងពាក្យសម្ងាត់ដោយប្រើ
urllib.parse.quote(password, safe='') - កំហុស
407 Proxy Authentication Requiredមានន័យថា username ឬ password នៅក្នុង URL string របស់អ្នកមិនត្រូវគ្នានឹងព័ត៌មានសម្ងាត់នៅលើ dashboard ឡើយ - ដំណើរការដូចគ្នាជាមួយ
httpx.Client(proxy='http://user:pass@ip:port')និងaiohttpsession.get(url, proxy=...)
មួយជំហានម្តងៗ
- 1
បម្លែង ip:port:user:pass ទៅជា URL syntax
ប្រើប្រាស់ Proxy Format Converter របស់យើង ដើម្បីបម្លែងបញ្ជី VinaProxy របស់អ្នកទៅជា string
http://user:pass@ip:port។ - 2
កំណត់ proxies dictionary
កំណត់
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}នៅក្នុង Python script របស់អ្នក។ - 3
ភ្ជាប់ទៅកាន់ instance នៃ requests.Session()
ចាប់ផ្ដើមដំណើរការ
s = requests.Session()ហើយហៅs.proxies.update(proxies)សម្រាប់ការធ្វើ pooling បែបKeep-Aliveជាប់រហូត។ - 4
ផ្ទៀងផ្ទាត់ exit IP ជាមួយសំណើសាកល្បង
ដំណើរការ
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json())ដើម្បីបញ្ជាក់ពី proxy IP ដែលកំពុងសកម្ម។
សំណួរដែលសួរញឹកញាប់
ហេតុអ្វីបានជា key 'https' ប្រើប្រាស់ 'http://user:pass@ip:port'?
បុព្វបទ http:// ប្រាប់ urllib3 អំពីរបៀបតភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើ proxy ផ្ទាល់ (ដោយប្រើ HTTP CONNECT ស្តង់ដារ) ខណៈពេលដែលចរាចរណ៍ពីដើមដល់ចប់ទៅកាន់គេហទំព័រគោលដៅ https:// នៅតែត្រូវបានការពារដោយការអ៊ិនគ្រីប TLS ពេញលេញ។
តើខ្ញុំត្រូវបង្វិល static proxy ចំនួន 25 នៅទូទាំងសំណើក្នុង Python យ៉ាងដូចម្តេច?
បញ្ចូល proxy URL ទាំង 25 របស់អ្នកទៅក្នុង pool = itertools.cycle(PROXIES) ហើយបញ្ជូន proxies={'http': p, 'https': p} ក្នុងមួយសំណើ ជាមួយនឹងកម្រិត rate limiting សមស្របតាម IP នីមួយៗ។
តើ VinaProxy កំណត់កម្រិត bandwidth លើ Python scraping script ដែរឬទេ?
ទេ គម្រោង Dedicated IPv4 និង Static ISP ទាំងអស់រួមបញ្ចូលចរាចរណ៍ទិន្នន័យប្រចាំខែដោយមិនកំណត់។
បង្កើត Python scraping pool គ្មានដែនកំណត់
Proxy ប្រភេទ Dedicated IPv4 និង Static ISP ភ្លាមៗនៅទូទាំង 7 ប្រទេស។
ទិញ Python Proxies