Verfahren
// 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);
Objektorientiert
<?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;
}
}
Verwendung
// 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()));
}
Anmerkung am Rande: Es wäre am besten, eine Art Schnittstelle namens AdapterInterface
zum Beispiel mit getResponse()
Methode und lassen Sie sie von der oben genannten Klasse implementieren. Dann können Sie diese Implementierung jederzeit mit einem anderen Adapter Ihrer Wahl austauschen, ohne dass Ihre Anwendung beeinträchtigt wird.
Verwendung von HTTPS / Verschlüsselung des Datenverkehrs
Normalerweise gibt es ein Problem mit cURL in PHP unter dem Windows-Betriebssystem. Wenn Sie versuchen, eine Verbindung zu einem https-geschützten Endpunkt herzustellen, erhalten Sie eine Fehlermeldung, die besagt, dass certificate verify failed
.
Die meisten Benutzer weisen die cURL-Bibliothek an, Zertifikatsfehler einfach zu ignorieren und fortzufahren ( curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Da dadurch Ihr Code funktioniert, führen Sie eine große Sicherheitslücke ein und ermöglichen es böswilligen Benutzern, verschiedene Angriffe auf Ihre Anwendung auszuführen, wie Der Mann in der Mitte Angriff oder ähnliches.
Tun Sie das nie und nimmer. Stattdessen müssen Sie einfach Ihre php.ini
und sagen Sie PHP, wo Ihr CA Certificate
Datei ist, damit sie Zertifikate korrekt verifizieren kann:
; modify the absolute path to the cacert.pem file
curl.cainfo=c:\php\cacert.pem
Das Neueste cacert.pem
können aus dem Internet heruntergeladen werden oder extrahiert von Ihrem Lieblingsbrowser . Bei der Änderung einer php.ini
Einstellungen zu ändern, müssen Sie Ihren Webserver neu starten.