Beranda BlogPengikisan web Cara menggunakan cURL dengan Python

Cara menggunakan cURL dengan Python

oleh Kadek

Hampir setiap pengguna Internet bekerja tanpa terlihat dengan cURL setiap hari.

Karena fleksibilitas dan kebebasannya, cURL digunakan di mana saja: mulai dari mobil dan televisi hingga router dan printer.

Apa itu cURL?

cURL adalah alat untuk mentransfer data ke dan dari server web dan membuat berbagai jenis permintaan data melalui protokol data yang berbeda:

  1. HTTP dan HTTPS. Ditujukan untuk mentransfer data teks antara klien dan server. Perbedaan utama di antara keduanya adalah HTTPS memiliki enkripsi data yang dikirimkan.
  2. FTP, FTPS, dan SFTP. Ditujukan untuk mentransfer file melalui jaringan. FTPS adalah protokol transfer file aman yang menggunakan teknologi SSL/TLS untuk mengenkripsi saluran komunikasinya. SFTP adalah protokol yang mentransfer file menggunakan teknologi SSH.
  3. IMAP dan IMAPS (IMAP melalui SSL) – Protokol lapisan aplikasi untuk akses email.
  4. POP3 dan POP3S (POP3 over SSL) – protokol untuk menerima pesan email.
  5. SMB – Protokol jaringan lapisan aplikasi untuk akses jarak jauh ke file, printer, dan sumber daya jaringan lainnya.
  6. SCP – Protokol untuk menyalin file antar komputer menggunakan SSH terenkripsi sebagai transportasi.
  7. TELNET – Protokol jaringan untuk akses jarak jauh ke komputer menggunakan penerjemah perintah.
  8. GOPHER – Protokol jaringan untuk pencarian terdistribusi dan transmisi dokumen.
  9. LDAP dan LDAPS (LDAP over SSL) – protokol untuk mengautentikasi layanan direktori.
  10. SMTP dan SMTPS (SMTP over SSL) – protokol jaringan untuk transmisi email.

Selain itu, cURL mendukung otentikasi HTTPS, posting HTTP, unggahan FTP, proxy, cookie, dan nama pengguna + kata sandi.

cURL adalah utilitas baris perintah lintas platform dan oleh karena itu dapat digunakan pada sistem operasi apa pun. Untuk memeriksa apakah cURL diinstal, buka cmd (baris perintah) dan ketik curl -V:

C:\Users\Admin>curl -V
curl 7.79.1 (Windows) libcurl/7.79.1 Schannel
Release-Date: 2021-09-22
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI UnixSockets

C:\Users\Admin>

Misalnya, untuk mendapatkan kode HTML, seseorang dapat menggunakan alat baris perintah untuk menulis:

curl example.com

Hasil:

C:\Users\Admin>curl example.com
<!doctype html>
<html>
<head>
    <title>Contoh domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Contoh domain</h1>
    <p>Domain ini untuk digunakan dalam contoh ilustratif dalam dokumen. Anda dapat menggunakan domain ini dalam literatur tanpa koordinasi sebelumnya atau meminta izin.</p>
    <p><a href="https://www.iana.org/domains/example">Informasi lebih lanjut...</a></p>
</div>
</body>
</html>

C:\Pengguna\Admin&gt;

Untuk menulis scraper situs web di cURL, seseorang dapat menggunakan API kami yang membantu dalam menggores halaman. Cukup isi kolom yang diperlukan lalu gunakan sesuai kebutuhan: jalankan dari situs web atau tempelkan kode ke dalam program.


Pembuat Permintaan
Pembuat Permintaan

Namun, tanpa alat tersebut, cURL biasanya tidak cukup karena diperlukan sebagai bagian dari program Python. Oleh karena itu, API untuk fungsionalitas cURL, perpustakaan libCURL, telah dibuat. Untuk Python, ada pembungkus untuk libCURL yang disebut pyCURL. Jadi pyCURL adalah ikal untuk Python.

Cara menggunakan cURL dengan Python

Pertama-tama, perlu diperhatikan bahwa ada banyak layanan yang dapat menerjemahkan perintah cURL ke dalam kode. Opsi ini cocok bagi mereka yang sudah memiliki pengalaman menulis perintah tetapi membutuhkan kode program.

Namun, perlu dicatat bahwa layanan tersebut biasanya menggunakan perpustakaan standar untuk permintaan dengan Python - perpustakaan Permintaan. Meskipun pendekatan ini agak membatasi, namun mungkin bermanfaat bagi sebagian orang.

Pilihan lainnya adalah menggunakan PycURL dan menulis kode program sendiri.

Bagi mereka yang mencari solusi tanpa kerumitan, kami menawarkan konverter cURL ke Python yang dapat dengan mudah mengubah perintah cURL Anda menjadi kode Python.

Menginstal perpustakaan PycURL

Seperti yang telah disebutkan, PycURL, sebagai pembungkus tipis libcURL, mewarisi semua fungsi libcURL. Misalnya, PycURL sangat cepat (jauh lebih cepat daripada Permintaan, pustaka Python untuk permintaan HTTP), mendukung multi-protokol, dan juga menyertakan soket untuk mendukung operasi jaringan. Selain itu, PycURl mendukung protokol data yang sama dengan cURL.

Untuk menginstal PycURL, buka cmd dan tulis perintah berikutnya:

pip install pycurl

Jika Anda mengalami masalah saat menginstal menggunakan perintah pip install, Anda dapat mengunjungi situs resmi PycURL tempat file instalasi versi terbaru berada.

Contoh cURL Python

Fungsi yang paling umum digunakan adalah GET, POST, PUT dan DELETE.

DAPATKAN permintaan

Contoh kode paling sederhana untuk menggunakan PycURL adalah mengambil data dengan permintaan GET. Untuk melakukan ini, modul lain harus terhubung - BytesIO (aliran yang menggunakan buffer byte dalam memori).

import pycurl 
from io import BytesIO

Objek yang digunakan kemudian harus dideklarasikan:

b_obj = BytesIO()
crl = pycurl.Curl()

Dan atur URL-nya:

crl.setopt(crl.URL, 'https://example.com/get)

Kemudian buka transfer, ambil dan lihat datanya:

# To write bytes using charset utf 8 encoding
crl.setopt(crl.WRITEDATA, b_obj) 
# Start transfer 
crl.perform() 
# End curl session 
crl.close() 
# Get the content stored in the BytesIO object (in byte characters) 
get_body = b_obj.getvalue() 
# Decode the bytes and print the result 
print('Output of GET request:\n%s' % get_body.decode('utf8'))

Ingatlah bahwa data JSON sedang ditampilkan. Jika terjadi kesalahan saat pengunggahan, kode respons akan dikembalikan. Misalnya kode status 404 berarti halaman tidak ditemukan.

permintaan POSTING

Permintaan POST memungkinkan data dikirim ke server. Sepertinya GET adalah permintaan HTTP. Ada dua cara berbeda untuk mengirim data menggunakan metode POST: mengirim data teks dan mengirim file.

Impor terlebih dahulu Pycurl dan urllib untuk pengkodean dan deklarasikan objek yang digunakan:

import pycurl
from urllib.parse import urlencode

crl = pycurl.Curl()
crl.setopt(crl.URL, 'https://example.com/post')

Kemudian atur metode permintaan HTTP ke POST dan data yang akan dikirim di badan permintaan:

post_data = {'field': 'value'}
postfields = urlencode(post_data)
crl.setopt(crl.POSTFIELDS, postfields)

Dan langkah terakhir – lakukan POST:

crl.perform()
crl.close()

Mengirim data dari file fisik serupa:

import pycurl

crl = pycurl.Curl()
crl.setopt(crl.URL, 'https://example.com/post')

crl.setopt(crl.HTTPPOST,(('fileupload',(clr.FORM_FILE, __file__, )),))

clr.perform()
clr.close()

Jika data file ada di memori, seseorang dapat menggunakan BUFFER/BUFFERPTR dalam kode Anda:

clr.setopt(clr.HTTPPOST, (('fileupload', (clr.FORM_BUFFER, 'readme.txt',
        clr.FORM_BUFFERPTR, 'This is a readme file',  )), ))

Kode lain akan sama.

permintaan MASUKKAN

Permintaan PUT seperti permintaan POST. Bedanya, PUT bisa digunakan untuk mengunggah file di badan permintaan. Pada saat yang sama, PUT dapat digunakan untuk membuat dan menimpa file di alamat tertentu. Satu hal yang perlu diingat saat menggunakan PUT dengan PycURL adalah file tersebut harus terbuka pada saat transfer.

Bagian ini mirip dengan metode POST:

import pycurl

clr = pycurl.Curl()
clr.setopt(clr.URL, 'https://example.com/put')

Kemudian Anda harus membuka file dan membacanya:

clr.setopt(clr.UPLOAD, 1)
file = open('body.json')
clr.setopt(clr.READDATA, file)

Transfer data kemudian dapat dimulai:

clr.perform()
clr.close()

Dan hanya pada akhirnya file dapat ditutup:

file.close()

HAPUS permintaan

Dan contoh terakhir adalah permintaan HTTP DELETE. Ini mengirimkan permintaan ke server untuk menghapus sumber daya target:

import pycurl 

crl = pycurl.Curl() 
crl.setopt(crl.URL, "http://example.com/items/item34") crl.setopt(crl.CUSTOMREQUEST, "DELETE")

crl.perform() 
crl.close()

mengunduh file

Terkadang data yang diterima perlu ditulis ke file. Untuk ini, Anda dapat menggunakan kode yang sama seperti untuk mentransfer data dari file, dengan satu pengecualian - fungsi setopt menggunakan WRITEDATA alih-alih READDATA:

crl.setopt(crl.WRITEDATA, file)

Menggunakan Proksi di PycURL

CURL Proxy adalah kunci utilitas Curl yang memungkinkan pengiriman permintaan HTTP secara tidak langsung melalui server proxy. Dengan kata lain, ini adalah hal yang sangat diperlukan untuk web scraping.

Pengaturan proxy relevan untuk mengurai data dalam jumlah besar. Mengirim ratusan permintaan per menit dari satu alamat IP membuat Anda berisiko diblokir.

Perlindungan diaktifkan di tingkat server untuk mencegah serangan DoS. Menggunakan proksi cURL yang berbeda memecahkan masalah ini dan memungkinkan data diambil tanpa risiko diblokir.

Untuk menggunakan proxy, perpustakaan Certifi harus diinstal:

pip install certifi

Namun, dalam banyak kasus, pengguna sudah memilikinya karena ini adalah perpustakaan bawaan:

C:\Users\Admin>pip install certifi
Requirement already satisfied: certifi in c:\users\admin\appdata\local\programs\python\python310\lib\site-packages (2022.5.18.1)

C:\Users\Admin>

Untuk menggunakannya, impor sertifikat ke dalam proyek:

import certifi
Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) (MSC v.1929 64 bit (AMD64)) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import certifi
>>> _

Untuk menggunakannya dalam program, impor semua perpustakaan terlebih dahulu:

import pycurl
from io import BytesIO
import certifi

Dan kemudian atur proxy:

def set_proxy(self, proxy):
     if proxy:
         logger.debug('PROXY SETTING PROXY %s', proxy)
         self.get_con.setopt(pycurl.PROXY, proxy)
         self.post_con.setopt(pycurl.PROXY, proxy)
         self.put_con.setopt(pycurl.PROXY, proxy)   

Kesimpulan dan temuan

CURL adalah utilitas kueri praktis yang mendukung sebagian besar protokol transfer. LibcURL API dibuat untuk digunakan dalam program Anda sendiri. Dan untuk digunakan dengan Python, pembungkus tipis bernama PycURL dibuat di atas libcURL.

Dengan bantuan perpustakaan ini dimungkinkan untuk menggunakan semua permintaan dan bekerja dengan semua protokol yang didukung oleh cURL. Pada saat yang sama, perpustakaan PycURL jauh lebih cepat daripada rekan Python-nya, perpustakaan Permintaan.

Pos terkait

Tinggalkan Komentar