PHP CURL Kirim dan terima permintaan dengan contoh

Terakhir diedit oleh Vinci pada 21 Juni 2022.

PHP cURL adalah perpustakaan yang memungkinkan klien untuk mengakses server jarak jauh melalui URL. Mengirim permintaan HTTP dari aplikasi atau komponen lain ke titik akhir.

Memungkinkan kunjungan antar-program untuk menerima tanggapan melalui jaringan. Mekanisme ini berguna untuk bekerja dengan layanan PHEST RESTful, interaksi API, dan sebagainya.

Ada banyak skenario di mana posting PHP cURL tepat. Sebagai contoh,

  1. Ekstrak konten dari halaman web
  2. Persiapan pakan dari sumber eksternal
  3. Metode akses API langsung tanpa SDK.

Contoh cepat ini memberikan kode sederhana untuk mengimplementasikan posting PHP cURL.

Contoh cepat

<?php
$postParameter = array(
    'name' => 'Jane',
    'dateOfBirth' => '1974-8-17'
);

$curlHandle = curl_init('http://domain-name/endpoint-path');
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $postParameter);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);

$curlResponse = curl_exec($curlHandle);
curl_close($curlHandle);


Selain itu, kita akan melihat lebih banyak contoh permintaan email cURL PHP yang lebih berguna di bagian mendatang.

Bagian 1 – Dasar-dasar PHP cURL

Berikut ini adalah langkah-langkah untuk melakukan siklus permintaan-respons PHP cURL awal.

  • Mulai sesi cURL.
  • Setel opsi cURL.
  • Jalankan permintaan
  • Menutup rapat

Bagaimana cara mengkonfigurasi PHP CURL?

PHP termasuk libcurl Pustaka yang memungkinkan lingkungan bekerja dengan cURL. Pustaka ini akan diaktifkan secara default.

Jika tidak, ikuti langkah-langkah di bawah ini untuk mengaktifkan modul PHP cURL di lingkungan Anda.

  1. Buka file konfigurasi PHP php.ini
  2. Periksa extension=php_curl.dll Awal.
  3. Hapus titik koma (;) di awal baris atas.
  4. Mulai ulang Apache Server

Siapkan permintaan POST PHP cURL – metode alternatif

Ada banyak cara untuk mengirim parameter posting PHP cURL.

  1. format JSON.
  2. string kueri HTTP.
  3. format larik POST.

format JSON:

<?php
curl_setopt($ch, CURLOPT_POSTFIELDS,"{key1:value1,key2:value2}");
?>

String kueri HTTP:

<?php
curl_setopt($ch, CURLOPT_POSTFIELDS,"key1=value1&key2=value2");
?>

Format Array PHP CURL POST

partikel untuk objek langsung CURLOPT_POSTFIELDS Mungkin memiliki array PHP untuk mengirim parameter ke titik akhir.

<?php 
 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data');
curl_setopt($ch, CURLOPT_POSTFIELDS, array("key1"=>"value1", "key2"=>"value2");
 
?>

Setel opsi tajuk cURL

Konstanta CURLOPT_HTTPHEADER digunakan untuk mengatur header PHP cURL. Header cURL dapat memiliki informasi lebih lanjut. Kunci berikut adalah contoh untuk menambahkan opsi header PHP cURL.

  • Terima-enkripsi
  • Kontrol-Tembolok
  • sang penyelenggara
  • Jenis konten
  • Bahasa penerimaan
  • Agen pengguna

Program ini mengatur opsi header cURL untuk mengatur tipe konten. Ada juga opsi untuk mengirim tajuk khusus. Ini untuk mengirim pasangan nilai kunci non-standar. Gunakan awalan X- Untuk mengirim header non-standar, misalnya,

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-key: value'
));

Memperbaiki CURLOPT_HEADER dengan boolean Itu benar, nyata. Ini untuk memungkinkan informasi header dilampirkan dengan umpan balik.

<?php
$url = "http://domain-name/endpoint-path";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$headers = array(
    "X-Custom-Header: header-value",
    "Content-Type: application/json"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_HEADER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;


Bagian 2 – Contoh Penggunaan

Dengan beberapa pengetahuan dasar, contoh-contoh berikut akan mudah dipahami. Ini berkaitan dengan beberapa skenario yang digunakan dengan mengirim atau menerima metode permintaan PHP.

Data formulir HTTP POST

PHP cURL memungkinkan Anda mengirim parameter ke server. Ia menggunakan salah satu metode yang kita bicarakan sebelumnya untuk mengirim parameter melalui cURL.

Skrip cURL berikut menunjukkan cara mengirim larik ke URL titik akhir. partikel untuk objek langsung CURLOPT_POST Dan CURLOPT_POSTFIELDS Nilai harus dikirim melalui surat PHP cURL.

<?php
$url="http://domain-name/endpoint-path";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$data = "name=jane&age=23";

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($curl);
curl_close($curl);
?>

PHP CURL POST untuk mengunggah file

Dimungkinkan juga untuk mengunggah file ke server melalui surat PHP cURL. Kode berikut menunjukkan cara mengunggah file gambar ke server.

Mempersiapkan objek dengan data file. Menggunakan fungsi PHP curl_file_create () untuk menyiapkan konten file posting.

Dengan mengirimkan ‘fileParam ‘ Dengan cara ini, kode titik akhir dapat diakses melaluinya $ _FILES[] Himpunan.

<?php
$url="https://domain-name/path-to-endpoint/php-curl-post-file-endpoint.php";

if (function_exists('curl_file_create')) {
    $fileContent = curl_file_create("cherry.jpeg", 'image/jpeg');
} else {
    $fileContent="@" . realpath("cherry.jpeg", 'image/jpeg');
}

$data = array('fileParam'=> $fileContent);

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST,true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result=curl_exec ($curl);
curl_close ($curl);

print $result;
?>

Letakkan kode akhir berikut di server. Kemudian tap titik akhir melalui script cURL diatas. Permintaan pengiriman curl PHP mengirimkan input file ke titik akhir ini. Kode PHP ini mengakses file yang diunggah dari array $ _FILES.

php-curl-post-file-endpoint.php

<?php
$targetDir="uploads";
if ($_FILES["fileParam"]["tmp_name"] != "") {
    $tmp_name = $_FILES["fileParam"]["tmp_name"];
    // basename() may prevent filesystem traversal attacks;
    // further validation/sanitation of the filename may be appropriate
    
    $name = basename($_FILES["fileParam"]["name"]);
    if(move_uploaded_file($tmp_name, $targetDir . "https://phppot.com/" . $name)) {
        print "Image uploaded.";
    } else {
        print "Image upload failed.";
    }
    
}
?>

Minta HTTP GET untuk mendapatkan halaman web

Dalam permintaan cURL, metode defaultnya adalah GET. Program memanggil server melalui cURL menggunakan metode permintaan GET default.

Tidak seperti PHP cURL POST, ia mengirimkan data sebagai string kueri. Untuk mengirim parameter ke permintaan GET, itu harus dibuat sebagai bagian dari URL.

HTML mengambil situs web yang ditandai sebagai titik akhir cURL. Mencetak jawaban dan menampilkan HTML situs web di browser.

<?php
$url="http://domain-name/endpoint-path";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curl);
curl_close($curl);
print $response;


Dapatkan HTML situs web melalui cURL dan tulis dalam file

Alih-alih mencetak desain situs web di browser, itu juga dapat ditulis ke file.

Kode ini membuat filehandle dan menulis respons HTML cURL ke file. Menggunakan kategori file untuk referensi.

Ini akan berguna jika Anda ingin mengunduh HTML situs web secara permanen dan menyimpannya di server.

<?php
$url="http://domain-name/endpoint-path";
$file = fopen("site-content.html", "w");

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FILE, $file);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);

curl_exec($curl);
curl_close($curl);
fclose($file);


PHP file_get_contents () Fungsi ini juga digunakan untuk mendapatkan konten URL yang diinginkan.

Namun, konfigurasi server harus mengizinkan konten untuk dibaca menggunakan metode ini.

PHP CURL memposting dan menerima data JSON

Contoh ini menunjukkan cara mengirim posting PHP cURL dalam format JSON. Itu juga menerima respons cURL dalam format JSON.

Kode ini adalah panduan untuk membuat layanan API untuk menerima permintaan dan mengirim tanggapan dalam format JSON.

<?php
$url="https://domain-name/path/php-curl-post-endpoint-json.php";
$data = array(
    "first_name" => "Jane",
    "last_name" => "Mclane",
    "email" => "jane_mc@gmail.com",
    "addresses" => array(
        "address1" => "21/A",
        "city" => "Los Angels",
        "country" => "USA",
        "phone" => "555-1212",
        "pincode" => "82312"
    )
);
$encodedData = json_encode($data);
$curl = curl_init($url);
$data_string = urlencode(json_encode($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt( $curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $encodedData);
$result = curl_exec($curl);
curl_close($curl);
print $result;


Kode ini menyiapkan respons JSON dengan menyetel tipe konten menggunakan header PHP (). Menetapkan program / json sebagai tipe konten.

php-curl-post-endpoint-json.php

<?php
header("Content-Type:application/json");
$data = file_get_contents('php://input');
print $data;


Manajemen Pengalihan (HTTP 301.302)

CURLOPT_FOLLOWLOCATION disetel ke true untuk melakukan pengalihan 3XX melalui PHP cURL.

Selama pengalihan, cURL mengirimkan permintaan GET untuk pengalihan berturut-turut. CURLOPT_POSTREDIR harus disetel untuk mengubah ini.

Program ini menetapkan CURL_REDIR_POST_ALL untuk mengirim permintaan PHP cURL POST dalam upaya berturut-turut.

Membatasi jumlah pengalihan menggunakan konstanta CURLOPT_MAXREDIRS.

<?php
$url="http://domain/path";
$data = array(
    "first_name" => "Jane",
    "last_name" => "Mclane"
);
$encodedData = json_encode($data);
$curl = curl_init($url);
$data_string = urlencode(json_encode($data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $encodedData);


curl_setopt($curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl,CURLOPT_MAXREDIRS, 3);
$result = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
print "<PRE>";
print_r($info);
print_r($result);


Program ini mengembalikan informasi lebih lanjut seperti yang ditunjukkan di bawah ini.

  • Pengalihan dipertimbangkan.
  • Pengalihan waktu
  • Tajuk dengan status 3XX.

php curl posting 3xx redirect

Kesalahan ketik cURL dimasukkan ke dalam file

Pelaporan adalah cara terbaik untuk tujuan audit. Laporan terkadang sangat berguna untuk debugging saat situs aktif.

Karena ini adalah panggilan jarak jauh, merekam kesalahan cURL dalam file membantu menganalisis dan memperbaiki masalah.

Kode ini memandu cara merekam kesalahan dalam posting PHP cURL. Menggunakan fungsi PHP curl_error()

<?php
$logFileHandle = fopen("log/curl-error-log.txt", 'a+');
$curl = curl_init("http://domain_name/path");
if(curl_exec($curl) === false)
{
    $date = date("m/d/Y");
    $errorMessage = curl_error($curl);
    $curlError = $date . ' Error: ' . $errorMessage . "\n\n";
}
curl_close($curl);
fwrite($logFileHandle, $curlError);
fclose($logFileHandle);

Tulis laporan cURL menggunakan konstanta CURLOPT_STDERR

Ada cara alternatif untuk merekam kesalahan PHP cURL dalam file. CURLOPT_STDERR menulis pesan kesalahan dengan referensi kategori file.

<?php
$logFileHandle = fopen("log/curl-error-log.txt", 'a+');
$curl = curl_init("http://domain_name/path");
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_FILE, $logFileHandle);
curl_setopt($curl, CURLOPT_STDERR, $logFileHandle);
curl_exec($curl);
curl_close($curl);
fclose($logFileHandle);


Program ini mengembalikan output berikut.
Log kesalahan php curl

Bagian 3 – Membuat skrip PHP cURL untuk mengekstrak gambar dari situs web

Di bagian artikel ini kita akan membuat komponen cURL serba bisa. Untuk mencapai pengambilan gambar dari halaman web, lakukan hal berikut.

  1. Buat layanan API untuk pembuatan prototipe DOM guna memuat respons.
  2. Buat layanan cURL untuk membuat prototipe, mengonfigurasi, dan menjalankan permintaan.
  3. Baca respons cURL dan muat ke objek DOM.
  4. Dapatkan URL sumber gambar dengan mengakses objek DOM.
  5. Buat galeri foto menggunakan larik respons PHP cURL.

Kelas layanan API untuk memulai cURL dan membuat objek DOM

Ini GrabImageAPI Membuat kelas instan PHP DODocument untuk memuat HTML situs.

Pembangun meluncurkan cURL dan mendapatkan respons URL HTML lengkap. Ini kemudian memuat respons ini ke objek DOM.

Dengan mereferensikan objek, getWebsiteImage () menerima URL sumber gambar.

Fungsi ini membaca semua gambar yang menggunakannya getElementsByTagName(). Dengan mengulangi larik data gambar, ia menyiapkan paket JSON dari URL gambar.

Layanan / GrabImageAPI.php

<?php
namespace Phppot\Service;

use \Phppot\Service\CurlService;
use DOMDocument;

class GrabImageAPI
{

    private $dom;

    public function __construct($url)
    {
        require_once __DIR__ . '/CurlService.php';
        $curlService = new CurlService($url);
        $siteHTML = $curlService->executeCurl();
        $this->dom = new DOMDocument();
        @$this->dom->loadHTML($siteHTML);
    }

    function getWebsiteImage()
    {
        // Parse DOM to get Images
        $images = $this->dom->getElementsByTagName('img');
        
        $imageSourceURL = array();
        for ($i = 0; $i < $images->length; $i ++) {
            $image = $images->item($i);
            $src = $image->getAttribute('src');
            
            if(filter_var($src, FILTER_VALIDATE_URL)) {
                $imageSourceURL[] = $src;
            }
        }
        $imageSourceJSON = json_encode($imageSourceURL);
        
        return $imageSourceJSON;
    }
}


Buat layanan cURL untuk operasi siklus hidup rutin

Kelas ini tidak lain adalah operasi curl dasar yang kita lihat di awal.

Pembuat GrabImageAPI menyertakan layanan ini dan membuat instance cURL.

Layanan / CurlService.php

<?php
namespace Phppot\Service;

class CurlService
{
    private $curl;
    
    private $endpoint;
    
    private $response;
    
    function __construct($url)
    {
        $this->endpoint = $url;
        $this->curl = curl_init($this->endpoint);
    }
    
    function setCurlOption()
    {
        curl_setopt($this->curl, CURLOPT_HEADER, 0);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1);
    }
    
    function executeCurl()
    {
        $this->setCurlOption();
        $this->response = curl_exec($this->curl);
        curl_close($this->curl);
        return $this->response;
    }
}

Aktifkan API untuk mengambil gambar melalui surat PHP cURL

Kode ini mengetuk API untuk mengambil gambar melalui PHP cURL. Memerlukan referensi kelas API untuk membuat galeri gambar dinamis menggunakan cURL.

Kode ini berguna untuk membuat widget galeri untuk toko eksternal Anda secara mandiri.

php-curl-grab-image.php

<?php
namespace Phppot;

use \Phppot\Service\GrabImageAPI;

require_once __DIR__ . '/Service/GrabImageAPI.php';
$url = "https://domain-name-here/";
$imageSourceArray = array();
try {
    // Call image grab PHP cURL script
    $grabImageAPI = new GrabImageAPI($url);
    
    // Get image source array in JSON format via PHP cURL
    $imageSource = $grabImageAPI->getWebsiteImage();
    $imageSourceArray = json_decode($imageSource, true);
} catch (Exception $e) {
    // Handle API request failure
    $statusMsg = $e->getMessage();
    print $statusMsg;
    exit;
}

// Iterate response and form image gallery in UI
foreach($imageSourceArray as $imageSource) {
    ?>
    <img src="https://phppot.com/php/php-curl-post/<?php echo $imageSource; ?>" style="width: 300px; margin: 20px;" />
    <?php 
}


Hasil

Kami harap artikel ini membantu Anda memperoleh pengetahuan mendalam tentang PHP cURL dan metode aplikasi lainnya.

Contoh singkat dari ujung ke ujung mungkin berguna dalam membuat komponen cURL untuk aplikasi Anda.

Saya menyambut komentar Anda untuk terus menambah nilai lebih bagi peserta didik.
Unduh

Kembali ke atas


Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.