2012-03-22 16 views
8

Come si imposta il tipo di contenuto di una richiesta HTTP?Imposta richiesta HTTP "Content-Type"

Ho provato questo:

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

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

E questo è il risultato:

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

ma senza fortuna finora ...
Che cosa devo fare per ottenere un Content-Type: application/xml nella mia risposta HTTP?

+0

Sì, lo so, ma cosa devo impostare nella richiesta per ottenere una risposta 'Content-Type: application/xml'? – Michiel

+0

Il risultato che si ottiene è una risposta HTTP ** ** non una richiesta. Stai chiedendo come impostare il tipo di contenuto della richiesta, o stai chiedendo come chiedere al server di fornire XML nella risposta? – Quentin

+0

È necessario impostare l'intestazione Accept (e non l'intestazione del tipo di contenuto). Quindi il server deve supportare più tipi di risposta e utilizzare l'intestazione accept per determinare quale utilizzare. Sai se il server lo fa? – Quentin

risposta

24

credo che le intestazioni devono essere un array di pianura i cui elementi sono fondamentali pieno: intestazioni di valore, non un array associativo:

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

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

Questo è specificato nella curl_setopt() documentation.

+0

Grazie per aver provato, ma sempre lo stesso risultato. O devo cancellare qualcosa? Coockies, cache, ... – Michiel

+0

È la risposta HTTP? Stai inviando l'intestazione del tipo di contenuto nella tua richiesta. Ciò non significa che il server di risposta invierà lo stesso tipo di contenuto. –

+0

Ho provato la stessa richiesta in * WizTools * e il server ha restituito il tipo di contenuto 'application/xml', quindi il server è in grado di inviare la risposta corretta. Solo quando provo con PHP personalizzato, non riesco a inviare le impostazioni di 'Content-Type' ... – Michiel

2

È possibile impostare un tipo di accettare per la tua richiesta (e usa la risposta di Michael per quello, dovresti contare la sua risposta come risposta alla domanda diretta, perché lo fa). Ciò non impone che il server risulti con quel tipo di contenuto.

Se l'altra estremità della richiesta è un file statico, è necessario assicurarsi che il server Web invii tale file con un tipo MIME di application/xml. Se termina con .xml, allora sia Apache che IIS lo faranno già. Se si tratta di qualcos'altro che è un'estensione di file non standard, ma si desidera che venga inviato come application/xml, sarà necessario ottenere il gestore server per impostare httpd.conf o .htaccess per aggiungere il tipo mime per il file. In IIS si usano gli strumenti di amministrazione della GUI per fare la stessa cosa, aggiungendo un tipo mime per l'estensione del file come application/xml.

Se l'altra estremità della richiesta è un linguaggio di scripting lato server come PHP, Perl, Python, ColdFusion, ASP, ASP.net, ecc. Ecc., È necessario utilizzare il metodo/la funzione appropriata in quella lingua per lo script viene chiamato per emettere l'intestazione del tipo di contenuto e impostarla su application/xml.

Aggiornamento: Si dice nei commenti che si sta utilizzando WizTools per emettere una richiesta che ottiene un ritorno di applicazione/xml. Se vuoi clonare quell'ambiente, invia TUTTE le intestazioni che sta inviando nella richiesta di ricciolo. Un'ipotesi è che l'interprete possa essere in gioco.

+0

Grazie per questa preziosa risposta. Quindi, la richiesta va bene così com'è, è il server che non funziona, giusto? – Michiel