data - recibir json en php post
PHP-Publicar JSON a través de file_get_contents (2)
Este es el código que siempre uso y parece bastante similar (aunque esto es, por supuesto, para x-www-form-urlencoded). Tal vez su username:key
debe ser base64_encode
''d.
function file_post_contents($url, $data, $username = null, $password = null)
{
$postdata = http_build_query($data);
$opts = array(''http'' =>
array(
''method'' => ''POST'',
''header'' => ''Content-type: application/x-www-form-urlencoded'',
''content'' => $postdata
)
);
if($username && $password)
{
$opts[''http''][''header''] = ("Authorization: Basic " . base64_encode("$username:$password"));
}
$context = stream_context_create($opts);
return file_get_contents($url, false, $context);
}
Estoy tratando de POSTAR contenido JSON a un punto final REST remoto, sin embargo, el valor ''contenido'' parece estar vacío en la entrega. Todos los demás encabezados, etc., se reciben correctamente, y el servicio web realiza pruebas con éxito con un cliente de prueba basado en navegador.
¿Hay algún problema con mi sintaxis debajo de donde especifico el campo ''contenido''?
$data = array("username" => "duser", "firstname" => "Demo", "surname" => "User", "email" => "[email protected]");
$data_string = json_encode($data);
$result = file_get_contents(''http://test.com/api/user/create'', null, stream_context_create(array(
''http'' => array(
''method'' => ''POST'',
''header'' => array(''Content-Type: application/json''."/r/n"
. ''Authorization: username:key''."/r/n"
. ''Content-Length: '' . strlen($data_string) . "/r/n"),
''content'' => $data_string)
)
));
echo $result;
La respuesta anterior de
function file_post_contents($url, $data, $username = null, $password = null) {
$postdata = http_build_query($data);
$opts = array(''http'' =>
array(
''method'' => ''POST'',
''header'' => ''Content-type: application/x-www-form-urlencoded'',
''content'' => $postdata
)
);
if($username && $password)
{
$opts[''http''][''header''] = ("Authorization: Basic " . base64_encode("$username:$password"));
}
$context = stream_context_create($opts);
return file_get_contents($url, false, $context);}
Es incorrecto. Esta función funciona a veces, pero es inexacta y fallará si no está utilizando la aplicación / x-www-form-urlencoded de Content-type y pasa un nombre de usuario y una contraseña.
Funciona para el escritor porque application / x-www-form-urlencoded es el tipo de contenido predeterminado, pero su manejo del nombre de usuario y la contraseña está sobrescribiendo la declaración anterior del tipo de contenido.
Aquí está la función corregida:
function file_post_contents($url, $data, $username = null, $password = null){
$postdata = http_build_query($data);
$opts = array(''http'' =>
array(
''method'' => ''POST'',
''header'' => "Content-type: application/x-www-form-urlencoded/r/n",
''content'' => $postdata
)
);
if($username && $password)
{
$opts[''http''][''header''] .= ("Authorization: Basic " . base64_encode("$username:$password")); // .= to append to the header array element
}
$context = stream_context_create($opts);
return file_get_contents($url, false, $context);}
Note la línea: $ opts [''http''] [''header''. = (El punto es igual a adjuntar al elemento de la matriz.)