2012-11-02 11 views
5

versuchen, das Äquivalent von dieser in PHP zu tun - und andernfalls :):Senden Auth in Header php curl

curl -H "X-abc-AUTH: 123456789" http://APIserviceProvider=http://www.cnn.com; 

"123456789" ist der API-Schlüssel. Die Befehlszeilenanweisung funktioniert einwandfrei.

PHP-Code (funktioniert nicht):

$urlToGet = "http://www.cnn.com"; 
$service_url = "http://APIserviceProvider=$urlToGet"; 

//header 

$contentType = 'text/xml';   //probably not needed 
$method = 'POST';     //probably not needed 
$auth = 'X-abc-AUTH: 123456789'; //API Key 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $service_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 

//does not work 



// curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Content-type: ' . 
    // $contentType . '; auth=' . $auth)); 

    //works! (THANKS @Fratyr for the clue): 

    curl_setopt($ch, CURLOPT_HTTPHEADER, Array($auth)); 

//this works too (THANKS @sergiocruz): 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Some_custom_header: 0', 
    'Another_custom_header: 143444,12' 
)); 


//exec 

$data = curl_exec($ch); 
echo $data; 
curl_close($ch); 

Irgendwelche Ideen?

+1

Warum sind Sie mit ' "Content-Type", wenn Ihr Kommandozeilenbeispiel einen 'X-abc-AUTH:' Header hat? – mario

+0

Ich erhielt einen Fehler "Inhaltstyp erforderlich". Aber ich finde es einfach heraus! Ich habe den obigen Code aktualisiert. – ven

Antwort

13

Um benutzerdefinierte Header in Ihre locken, um Sie so etwas wie die folgenden tun sollen:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Some_custom_header: 0', 
    'Another_custom_header: 143444,12' 
)); 

Daher sollte folgend (in Ihrem Fall gegeben X-abc-AUTH ist der einzige Kopf Sie müssen senden über):

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-abc-AUTH: 123456789' // you can replace this with your $auth variable 
)); 

Wenn Sie weitere benutzerdefinierte Header benötigen, alles, was Sie tun müssen, ist in der curl_setopt zum Array hinzufügen auf.

Ich hoffe, das hilft :)

+1

Danke Kumpel das hat super funktioniert! – ven

+0

Kein Problem :) – sergiocruz

0
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'auth=' . $auth 
)); 
+0

Das ist nicht einmal gültig http. – Evert

+0

Dann warum der gleiche Beitrag oben bekam + und ich habe ein -? :) – deb0rian

+0

Das hat fast funktioniert! Das hat es funktioniert: curl_setopt ($ ch, CURLOPT_HTTPHEADER, Array ($ auth)); – ven

0

Sie legen nur ein Request-Header, nicht die zwei, die Sie wollten. Man könnte es zum Beispiel so tun:

// input 
$urlToGet = "http://www.cnn.com"; 

// url 
$service_url = sprintf("http://APIserviceProvider=%s", urlencode($urlToGet)); 

//header 
$contentType = 'Content-type: text/xml'; //probably not needed 
$auth  = 'X-abc-AUTH: 123456789'; //API Key 
$method  = 'POST'; //probably not needed 

// curl init 
$ch = curl_init($service_url); 
curl_setopt_array($ch, [ 
    CURLOPT_RETURNTRANSFER => true, 
    CURLINFO_HEADER_OUT => true, 
    CURLOPT_HTTPHEADER  => [ 
     $contentType, 
     $auth, 
    ], 
]); 

// curl exec 
$data = curl_exec($ch); 
curl_close($ch); 

// output 
echo $data; 

(Service URL zum richtigen ändern diese Arbeit zu bekommen)

+0

danke für deinen Vorschlag - scheint, als hätte es funktioniert, aber es hat nicht funktioniert :(Ich ändere die Service-URL + Taste auch. ..dank nochmal – ven

+0

Sie könnten nach 'curl_exec' eine Fehlerüberprüfung durchführen:' var_dump (curl_error ($ ch)); ' – hakre

3

Verwenden Sie die folgende Syntax

$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 = array(); 
$headers[] = 'X-abc-AUTH: 123456789'; 
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; 
$headers[] = 'Accept-Encoding: gzip, deflate'; 
$headers[] = 'Accept-Language: en-US,en;q=0.5'; 
$headers[] = 'Cache-Control: no-cache'; 
$headers[] = 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'; 
$headers[] = 'Host: 202.71.152.126'; 
$headers[] = 'Referer: http://www.example.com/index.php'; //Your referrer address 
$headers[] = 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0'; 
$headers[] = 'X-MicrosoftAjax: Delta=true'; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

$server_output = curl_exec ($ch); 

curl_close ($ch); 

print $server_output ;