2011-11-13 41 views
234

Me pregunto si/cómo puede agregar encabezados personalizados a una solicitud cURL HTTP en PHP. Estoy tratando de emular la forma en iTunes agarra obra y utiliza estas cabeceras no estándar:Cabeceras personalizadas PHP cURL

X-Apple-Tz: 0 
X-Apple-Store-Front: 143444,12 

¿Cómo podría añadir estas cabeceras a una petición?

Respuesta

116

utilice la siguiente sintaxis

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/process.php"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Post Fields 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$headers = [ 
    'X-Apple-Tz: 0', 
    'X-Apple-Store-Front: 143444,12', 
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Encoding: gzip, deflate', 
    'Accept-Language: en-US,en;q=0.5', 
    'Cache-Control: no-cache', 
    'Content-Type: application/x-www-form-urlencoded; charset=utf-8', 
    'Host: www.example.com', 
    'Referer: http://www.example.com/index.php', //Your referrer address 
    'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0', 
    'X-MicrosoftAjax: Delta=true' 
]; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$server_output = curl_exec ($ch); 

curl_close ($ch); 

print $server_output ; 
+15

Usted merece una cookie también – SebastianView

+2

Engañar a la cadena del agente de usuario me parece una mala idea. [Aquí está lo que dice la especificación HTTP] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43). – starbeamrainbowlabs

+1

@SebastianView ¡obtienes una galleta! ¡obtienes una galleta! ¡obtienes una galleta! todos reciben una galleta! – Dheeraj

0

Aquí es una función básica: ejemplo

/** 
* 
* @param string $url 
* @param string|array $post_fields 
* @param array $headers 
* @return type 
*/ 
function cUrlGetData($url, $post_fields = null, $headers = null) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    if ($post_fields && !empty($post_fields)) { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
    } 
    if ($headers && !empty($headers)) { 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    } 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    if (curl_errno($ch)) { 
     echo 'Error:' . curl_error($ch); 
    } 
    curl_close($ch); 
    return $data; 
} 

Uso:

$url = "http://www.myurl.com"; 
$post_fields = 'postvars=val1&postvars2=val2'; 
$headers = ['Content-Type' => 'application/x-www-form-urlencoded', 'charset' => 'utf-8']; 
$dat = cUrlGetData($url, $post_fields, $headers);