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);
Objektorientierter
<?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;
}
}
Verwendungszweck
// 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()));
}
Randnotiz hier: Es ist am besten, eine Art Schnittstelle zu erstellen, die AdapterInterface
beispielsweise mit getResponse()
method aufgerufen wird, und sie von der obigen Klasse implementieren zu lassen. Dann können Sie diese Implementierung jederzeit mit einem anderen Adapter Ihrer Art austauschen, ohne dass Ihre Anwendung Nebenwirkungen hat.
Verwenden von HTTPS / Verschlüsseln des Datenverkehrs
Normalerweise gibt es ein Problem mit cURL in PHP unter dem Windows-Betriebssystem. Beim Versuch, eine Verbindung zu einem https-geschützten Endpunkt herzustellen, wird eine Fehlermeldung angezeigt certificate verify failed
.
Was die meisten Leute hier tun, ist, der cURL-Bibliothek anzuweisen, Zertifikatfehler einfach zu ignorieren und fortzufahren ( curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Damit Ihr Code funktioniert, führen Sie eine große Sicherheitslücke ein und ermöglichen böswilligen Benutzern, verschiedene Angriffe auf Ihre App auszuführen, z. B. Man In The Middle- Angriffe oder ähnliches .
Mach das niemals. Stattdessen müssen Sie lediglich Ihre ändern php.ini
und PHP mitteilen, wo sich Ihre CA Certificate
Datei befindet, damit die Zertifikate korrekt überprüft werden können:
; modify the absolute path to the cacert.pem file
curl.cainfo=c:\php\cacert.pem
Die neuesten cacert.pem
können aus dem Internet heruntergeladen oder aus Ihrem bevorzugten Browser extrahiert werden . Denken Sie beim Ändern der php.ini
zugehörigen Einstellungen daran, den Webserver neu zu starten.
http_build_query()
, mit Parametern umzugehen; Übergeben Sie einfach das Array anCURLOPT_POSTFIELDS
ist genug.