2012-03-22 12 views
8

¿Cómo se establece el tipo de contenido de una solicitud HTTP?Establecer la solicitud HTTP "Content-Type"

He intentado esto:

$headers['Accept'] = 'application/xml'; 
$headers['Content-Type'] = 'application/xml'; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

Y este es el resultado:

HTTP/1.1 200 OK 
Content-Encoding: gzip 
Content-Type: text/html;charset=UTF-8 
Date: Thu, 22 Mar 2012 14:04:36 GMT 

pero sin suerte hasta ahora ...
¿Qué tengo que hacer para conseguir un Content-Type: application/xml en mi respuesta HTTP?

+0

Sí, lo sé, pero ¿qué debo configurar en mi solicitud para obtener una respuesta 'Content-Type: application/xml'? – Michiel

+0

El resultado que das es una ** respuesta HTTP ** no una solicitud. ¿Estás preguntando cómo configurar el tipo de contenido de la solicitud o estás preguntando cómo pedir al servidor que proporcione XML en la respuesta? – Quentin

+0

Debe establecer el encabezado Aceptar (y no el encabezado de tipo de contenido). Entonces, el servidor necesita admitir múltiples tipos de respuestas y usar el encabezado accept para determinar cuál usar. ¿Sabes si el servidor hace eso? – Quentin

Respuesta

24

Creo que las cabeceras debe ser un array plano cuyos elementos son clave completo: cabeceras de valor, no una matriz asociativa:

$headers = array(); 
$headers[] = 'Accept: application/xml'; 
$headers[] = 'Content-Type: application/xml'; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

Esto se especifica en la curl_setopt() documentation.

+0

Gracias por intentarlo, pero sigue teniendo el mismo resultado. ¿O tengo que borrar algo? Coockies, caché, ... – Michiel

+0

¿Es esa la respuesta HTTP? Está enviando el encabezado de tipo de contenido en su solicitud. Eso no significa que el servidor que responde devolverá el mismo tipo de contenido. –

+0

He intentado la misma solicitud en * WizTools * y el servidor devolvió el tipo de contenido 'application/xml', por lo que el servidor puede enviar la respuesta correcta. Solo cuando intento con PHP personalizado, no consigo enviar la configuración 'Content-Type' ... – Michiel

2

Se establece un dispositivo de aceptación tipo para su solicitud (y use la respuesta Michael para eso, debe contar su respuesta como respuesta a la pregunta directa, porque lo hace). Eso no obliga a que el servidor coincida con ese tipo de contenido.

Si el otro extremo de la solicitud es un archivo estático, debe asegurarse de que su servidor web envíe ese archivo con un tipo MIME de application/xml. Si termina con .xml, entonces tanto Apache como IIS ya lo harán. Si se trata de una extensión de archivo no estándar, pero desea que se envíe como application/xml, deberá obtener el administrador del servidor para establecer httpd.conf o .htaccess para agregar el tipo de mime para el archivo. En IIS, utiliza las herramientas de administración de la GUI para hacer lo mismo, agregando un tipo mime para la extensión de archivo como application/xml.

Si el otro extremo de la solicitud es un lenguaje de scripting del lado del servidor como PHP, Perl, Python, ColdFusion, ASP, ASP.net, etc., entonces necesita usar el método/función apropiada en ese idioma para el Se está solicitando el script para emitir el encabezado de tipo de contenido y establecerlo en application/xml.

Actualización: Usted dice en los comentarios que está utilizando WizTools para emitir una solicitud que obtiene un retorno de la aplicación/xml. Si desea clonar ese entorno, envíe TODOS los encabezados que está enviando en su solicitud curl. Una suposición es que el agente de usuario podría estar en juego.

+0

Gracias por esta valiosa respuesta. Entonces, la solicitud está bien tal como está, es el servidor que no funciona, ¿verdad? – Michiel