2012-11-02 16 views
5

próbuje zrobić odpowiednik tego w PHP - i braku :):Wysyłanie auth w nagłówkach php curl

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

"123456789" jest kluczem API. Instrukcja wiersza poleceń działa poprawnie.

kodu PHP (nie działa):

$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); 

Jakieś pomysły?

+1

Dlaczego używasz ' Content-Type', jeśli twój przykład wiersza poleceń ma nagłówek 'X-abc-AUTH:'? – mario

+0

Otrzymałem komunikat "Wymagany typ zawartości". Ale po prostu to rozgryzłem! Zaktualizowałem powyższy kod. – ven

Odpowiedz

13

W celu uzyskania niestandardowe nagłówki na swojej zwinięcie należy zrobić coś jak następuje:

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

zatem następujące powinny działać w Twoim przypadku (przy X-abc-AUTH jest tylko nagłówek trzeba wysłać nad):

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

Jeśli potrzebujesz dodatkowych niestandardowych nagłówków, wszystko co musisz zrobić, to dodać do tablicy w curl_setopt.

Mam nadzieję, że to pomoże :)

+1

Dzięki, że kolega to działało świetnie! – ven

+0

Nie ma problemu w ogóle :) – sergiocruz

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

To nie jest poprawny http. – Evert

+0

To dlaczego ten sam post powyżej otrzymał + i mam -? :) – deb0rian

+0

To prawie zadziałało! To sprawiło, że to działało: curl_setopt ($ ch, CURLOPT_HTTPHEADER, Array ($ auth)); – ven

0

ustawić tylko jeden nagłówek żądania, a nie dwóch chciałeś. Można to zrobić na przykład tak:

// 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; 

(zmienić adres URL usługi na prawą, aby to działało)

+0

dzięki za twoją sugestię - wygląda na to, że zadziałałoby, ale nie :(zmieniam również adres URL usługi +. .. dziękuję ponownie – ven

+0

Możesz chcieć zrobić pewne sprawdzanie błędów po 'curl_exec':' var_dump (curl_error ($ ch)); ' – hakre

3

użyć następującej składni

$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 ;