Отправка auth в заголовках php curl

пытаясь сделать эквивалент этого в PHP – и не удается :):

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

«123456789» – это ключ API. Оператор командной строки работает отлично.

PHP-код (не работает):

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

Есть идеи?

Чтобы получить пользовательские заголовки в вашем завитке, вы должны сделать что-то вроде следующего:

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

Поэтому в вашем случае должно работать следующее (учитывая, что X-abc-AUTH – это единственный заголовок, который вам нужно отправить):

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

Если вам нужны дополнительные пользовательские заголовки, все, что вам нужно сделать, это добавить к массиву в curl_setopt.

Надеюсь, это поможет 🙂

Используйте следующий синтаксис

 $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 ; 
 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'auth=' . $auth )); 

Вы устанавливаете только один заголовок запроса, а не два, которые вы хотели. Вы можете сделать это, например, следующим образом:

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

(измените URL-адрес службы на правильную, чтобы заставить это работать)