ejemplos - php curl header
Usando el método PUT con PHP cUrl Library (3)
En lugar de crear un archivo temporal en el disco, puede usar php://temp
.
$body = ''the RAW data string I want to send'';
/** use a max of 256KB of RAM before going to disk */
$fp = fopen(''php://temp/maxmemory:256000'', ''w'');
if (!$fp)
{
die(''could not open temp memory data'');
}
fwrite($fp, $body);
fseek($fp, 0);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_INFILE, $fp); // file pointer
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($body));
La ventaja es que no hay disco IO, por lo que debería ser más rápido y con menos carga en su servidor.
Puedo ejecutar el siguiente comando curl (en la línea de comando) con éxito:
curl -XPOST --basic -u user:password -H accept:application/json -H Content-type:application/json --data-binary ''{ "@queryid" : 1234 }'' http://localhost/rest/run?10
Esto es lo que estoy haciendo hasta ahora, sin embargo, no parece estar funcionando con el servicio REST que estoy usando:
$headers = array(
''Accept: application/json'',
''Content-Type: application/json'',
);
$url = ''http://localhost/rest/run?10'';
$query = ''{ "@queryid" : 1234 }'';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "user:password");
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_POSTFIELDSIZE, strlen($query));
$output = curl_exec($ch);
echo $output;
¿Cuál es la forma correcta de tratar de convertir --data-binary usando un método PUT?
Hola, todo lo tengo funcionando usando esta configuración:
// Start curl
$ch = curl_init();
// URL for curl
$url = "http://localhost/";
// Clean up string
$putString = stripslashes($query);
// Put string into a temporary file
$putData = tmpfile();
// Write the string to the temporary file
fwrite($putData, $putString);
// Move back to the beginning of the file
fseek($putData, 0);
// Headers
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Binary transfer i.e. --data-BINARY
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
// Using a PUT method i.e. -XPUT
curl_setopt($ch, CURLOPT_PUT, true);
// Instead of POST fields use these settings
curl_setopt($ch, CURLOPT_INFILE, $putData);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putString));
$output = curl_exec($ch);
echo $output;
// Close the file
fclose($putData);
// Stop curl
curl_close($ch);
:)
Todo lo que necesita establecerse es la solicitud personalizada para reutilizar el método de publicación.
CURLOPT_URL=>$url,
CURLOPT_CUSTOMREQUEST=>''PUT'',
CURLOPT_POSTFIELDS=>$params,