Posting PHP CURL dan Dapatkan permintaan dengan contoh

oleh Vincy. Terakhir diubah pada 21 Juni 2022.

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

Ini memungkinkan hit antar-aplikasi untuk mendapatkan respons melalui jaringan. Mekanisme ini berguna untuk bekerja dengan layanan PHP RESTful, interaksi API, dan lain-lain.

Ada banyak skenario kasus penggunaan di mana posting PHP cURL sangat cocok. Sebagai contoh,

  1. Mengekstrak konten dari halaman web.
  2. Menyiapkan pakan dari sumber eksternal.
  3. Metode akses langsung API bebas SDK.

Contoh cepat ini memberikan kode langsung 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);


Terlepas dari ini, kita akan melihat lebih banyak contoh kasus penggunaan permintaan posting PHP cURL di bagian mendatang.

Bagian 1 – Dasar-dasar PHP cURL

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

  • Inisialisasi sesi cURL.
  • Setel opsi cURL.
  • Jalankan permintaan.
  • Tutup sesi.

Bagaimana cara mengkonfigurasi PHP cURL?

PHP berisi libcurl perpustakaan untuk membiarkan lingkungan bekerja dengan cURL. Pustaka ini akan diaktifkan secara default.

Jika tidak, lakukan langkah-langkah berikut untuk mengaktifkan modul PHP cURL di lingkungan Anda.

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

Setel 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 larik PHP cURL POST

Itu CURLOPT_POSTFIELDS mungkin memiliki array PHP untuk meneruskan 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

Untuk mengatur header PHP cURL, konstanta CURLOPT_HTTPHEADER digunakan. Header cURL dapat memiliki lebih banyak informasi. Kunci berikut adalah beberapa contoh untuk menambahkan opsi header PHP cURL.

  • Terima-Encoding
  • Kontrol-Tembolok
  • Tuan rumah
  • Jenis konten
  • Terima-Bahasa
  • 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. Contoh,

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

Konstanta CURLOPT_HEADER disetel dengan boolean BENAR. Ini untuk memungkinkan informasi tajuk dilampirkan dengan respons 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 kasus penggunaan

Dengan beberapa pengetahuan dasar, akan mudah untuk memahami contoh-contoh berikut. Ini berkaitan dengan beberapa skenario kasus penggunaan posting PHP cURL atau mendapatkan metode permintaan.

Data formulir HTTP POST

PHP cURL memungkinkan parameter posting ke server. Ini menggunakan salah satu metode yang telah kita bahas sebelumnya untuk memposting parameter melalui cURL.

Skrip cURL berikut menunjukkan cara memposting larik ke URL titik akhir. Itu CURLOPT_POST dan CURLOPT_POSTFIELDS adalah untuk mengirim nilai melalui posting 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 pos PHP cURL. Kode di bawah ini menunjukkan cara mengunggah file gambar ke server.

Ini mempersiapkan objek dengan data file. Ini menggunakan fungsi PHP curl_file_create() untuk menyiapkan konten posting file.

Dengan mengirimkan ‘fileParam’ bundel dengan cara ini, kode titik akhir dapat mengaksesnya melalui $_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;
?>

Masukkan kode titik akhir berikut di server. Kemudian tekan titik akhir melalui skrip cURL di atas. Permintaan posting 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.";
    }
    
}
?>

Permintaan HTTP GET untuk mengambil halaman web

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

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

Ini mengambil HTML situs web yang ditentukan sebagai titik akhir cURL. Ini mencetak respons dan merender HTML situs web target 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;


Ambil HTML situs web melalui cURL dan tulis ke file

Alih-alih mencetak tata letak situs web ke browser, itu juga dapat ditulis ke dalam file.

Kode ini membuat filehandle dan menulis respons HTML cURL ke dalam file. Ini menggunakan pegangan file sebagai referensi.

Ini akan berguna jika Anda ingin mengunduh dan menyimpan HTML situs web ke server secara permanen.

<?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_isi() fungsi ini juga digunakan untuk mengambil konten dari URL target.

Namun, konfigurasi server harus memungkinkan membaca konten dengan 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 memandu pembuatan layanan API untuk mendapatkan permintaan dan mengirim respons 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 PHP header(). Ini menetapkan aplikasi/json sebagai tipe konten.

php-curl-post-endpoint-json.php

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


Menangani pengalihan (HTTP 301.302)

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

Selama pengalihan, cURL akan mengirim permintaan GET pada pengalihan berturut-turut. Untuk mengubah ini, CURLOPT_POSTREDIR harus disetel.

Program ini menetapkan CURL_REDIR_POST_ALL untuk mengirim permintaan PHP cURL POST pada upaya yang berurutan.

Ini membatasi jumlah pengalihan dengan 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 akan mengembalikan informasi lebih lanjut seperti yang ditunjukkan di bawah ini.

  • Pengalihan dihitung.
  • Waktu untuk mengarahkan.
  • Header dengan status 3XX.

php curl posting 3xx redirect

Menulis kesalahan cURL masuk ke file

Menyimpan log adalah praktik terbaik untuk tujuan audit. Saat situs aktif, terkadang log juga sangat berguna untuk debugging.

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

Kode ini memandu cara mencatat kesalahan yang terjadi selama posting PHP cURL. Ini menggunakan fungsi PHP curl_error() untuk

<?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 . "nn";
}
curl_close($curl);
fwrite($logFileHandle, $curlError);
fclose($logFileHandle);

Tulis log cURL menggunakan konstanta CURLOPT_STDERR

Ada metode alternatif untuk mencatat kesalahan PHP cURL ke dalam file. CURLOPT_STDERR menulis pesan kesalahan dengan referensi pegangan 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 akan 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 ujung ke ujung. Ini akan melakukan hal berikut untuk mencapai pengambilan gambar dari halaman web.

  1. Buat layanan API untuk membuat instance DOM untuk memuat respons.
  2. Buat layanan cURL untuk membuat instance, 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 dengan menggunakan larik respons PHP cURL.

Kelas layanan API untuk memulai cURL dan membuat objek DOM

Ini GrabImageAPI class membuat instans PHP DOMDocument untuk memuat HTML situs.

Konstruktor memulai cURL dan mengambil respons HTML lengkap dari URL. Kemudian, ia memuat respons ini ke objek DOM.

Dengan referensi objek, getWebsiteImage() mendapatkan URL sumber gambar.

Fungsi ini membaca semua gambar dengan menggunakan getElementsByTagName(). Dengan mengulangi larik data gambar, ia menyiapkan bundel JSON dari URL gambar.

Layanan/GrabImageAPI.php

<?php
namespace PhppotService;

use PhppotServiceCurlService;
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 melakukan operasi siklus hidup rutin

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

Konstruktor GrabImageAPI menyertakan layanan ini dan membuat instance cURL.

Service/CurlService.php

<?php
namespace PhppotService;

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;
    }
}

Memicu API untuk mengambil gambar melalui posting PHP cURL

Kode ini akan menekan API untuk mengambil gambar melalui posting PHP cURL. Ini membutuhkan referensi kelas API yang 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 PhppotServiceGrabImageAPI;

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 
}


Kesimpulan

Semoga artikel ini membantu Anda mengetahui pengetahuan mendalam tentang posting PHP cURL dan metode permintaan lainnya.

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

Saya menyambut komentar Anda untuk terus memberikan lebih banyak nilai tambah kepada pelajar.
Unduh

Kembali ke Atas

[ad_2]
Source link