प्रक्रियात्मक
// set post fields
$post = [
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
];
$ch = curl_init('http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump($response);
वस्तु के उन्मुख
<?php
// mutatis mutandis
namespace MyApp\Http;
class CurlPost
{
private $url;
private $options;
/**
* @param string $url Request URL
* @param array $options cURL options
*/
public function __construct($url, array $options = [])
{
$this->url = $url;
$this->options = $options;
}
/**
* Get the response
* @return string
* @throws \RuntimeException On cURL error
*/
public function __invoke(array $post)
{
$ch = curl_init($this->url);
foreach ($this->options as $key => $val) {
curl_setopt($ch, $key, $val);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
$error = curl_error($ch);
$errno = curl_errno($ch);
if (is_resource($ch)) {
curl_close($ch);
}
if (0 !== $errno) {
throw new \RuntimeException($error, $errno);
}
return $response;
}
}
प्रयोग
// create curl object
$curl = new \MyApp\Http\CurlPost('http://www.example.com');
try {
// execute the request
echo $curl([
'username' => 'user1',
'password' => 'passuser1',
'gender' => 1,
]);
} catch (\RuntimeException $ex) {
// catch errors
die(sprintf('Http error %s with code %d', $ex->getMessage(), $ex->getCode()));
}
यहाँ ध्यान दें: यह विधि के AdapterInterface
साथ उदाहरण के लिए बुलाया इंटरफ़ेस के कुछ प्रकार बनाने के लिए सबसे अच्छा होगा getResponse()
और कक्षा को इसे लागू करने दें। फिर आप अपने आवेदन के किसी भी साइड इफेक्ट के बिना, इस कार्यान्वयन को हमेशा अपने जैसे किसी अन्य एडाप्टर के साथ स्वैप कर सकते हैं।
HTTPS / एन्क्रिप्टिंग ट्रैफ़िक का उपयोग करना
आमतौर पर विंडोज ऑपरेटिंग सिस्टम के तहत PHP में cURL के साथ एक समस्या है। Https संरक्षित एंडपॉइंट से कनेक्ट करने का प्रयास करते समय, आपको एक त्रुटि मिलेगी जो आपको बता रही है certificate verify failed
।
ज्यादातर लोग यहां क्या करते हैं, यह बताने के लिए कि CURL लाइब्रेरी को केवल प्रमाणपत्र त्रुटियों को अनदेखा करना और जारी रखना ( curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
) है। जैसा कि यह आपके कोड को काम करेगा, आप भारी सुरक्षा छेद का परिचय देते हैं और दुर्भावनापूर्ण उपयोगकर्ताओं को आपके ऐप पर विभिन्न हमलों को करने में सक्षम बनाते हैं जैसे मैन इन द मिडिल अटैक या ऐसे।
कभी नहीं, कभी ऐसा करो। इसके बजाय, आपको बस अपने को संशोधित करने php.ini
और पीएचपी CA Certificate
को यह बताने की आवश्यकता है कि आपकी फ़ाइल को सही तरीके से प्रमाण पत्र सत्यापित करने की अनुमति है:
; modify the absolute path to the cacert.pem file
curl.cainfo=c:\php\cacert.pem
नवीनतम cacert.pem
को इंटरनेट से डाउनलोड किया जा सकता है या अपने पसंदीदा ब्राउज़र से निकाला जा सकता है । किसी भी php.ini
संबंधित सेटिंग्स को बदलते समय अपने वेबसर्वर को पुनः आरंभ करना याद रखें।
http_build_query()
मापदंडों को संभालने के लिए उपयोग करने की कोई आवश्यकता नहीं है ; बस पास के लिएCURLOPT_POSTFIELDS
पर्याप्त है।