2016-09-28 2 views
0

Я написал функцию в PHP для отправки запроса CURl. Код приведен ниже.PHP - странное поведение CURL при настройке заголовков

function curl_post($url,$fields,$headers=[],$connect_timeout = 3,$timeout = 20) { 
    $ch = curl_init(); 
    $postvars = ''; 
    foreach($fields as $key=>$value) { 
     $postvars .= $key . "=" . $value . "&"; 
    } 

    $postvars = trim($postvars,'&'); 
    $postvars = json_encode($fields); 


    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST, 1);    //0 for a get request 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,$connect_timeout); 

    curl_setopt($ch,$timeout, 20); 
    $refined_headers = []; 
    if(sizeof($headers)) { 
     foreach($headers as $name => $value) { 
      $refined_headers[] = "'".$name.": ".$value."'"; 
     } 


     print_r($refined_headers); 
     //$refined_headers = ['Content-Type: application/json']; 
     //echo $refined_headers;exit; 
     curl_setopt($ch,CURLOPT_HTTPHEADER,$refined_headers); 




    } 
    $response = curl_exec($ch); 


    $info = curl_getinfo($ch,CURLINFO_CONTENT_TYPE); 
    print_r($info); 
    curl_close ($ch); 
    return $response; 
} 

Так я назвал функцию как этот

$url = API_ENDPOINT.$method.'/'; 

$response = curl_post($url,$params_to_send,$headers); 
echo $response; 

где $ URL содержит мой API URL и $ PARAMS содержат параметры, как ассоциативный массив и $ заголовки следующим

$headers = ['Content-Type'=>'application/json']; 

Мои проблема заключается в том, что заголовок типа содержимого настраивается. Но когда я вручную устанавливаю его внутри функции curl_post, например

$refined_headers = ['Content-Type: application/json'] 

он отлично работает. В чем проблема с моим кодом.

+0

'[ 'Content-Type' => 'приложение/JSON'];' не равен '[ 'Content-Type: применение/JSON']' чек цитирует –

+0

следующие строки уже делает это. foreach ($ headers as $ name => $ value) { $ refined_headers [] = "'". $ Name. ":". $ Value. "'"; } Поскольку это не сработало, я положил его вручную –

+0

Я хочу сказать, что вы делаете так: - '$ headers = ['Content-Type' => 'application/json'];' который не работает. измените это на '$ headers = ['Content-Type: application/json'];' –

ответ

0

Исправлена ​​ошибка. Проблема была я поставил две одинарные кавычки до и после заголовка, который не был необходим

$refined_headers[] = "'".$name.": ".$value."'"; 

Я изменил, что на следующее и issueis решены.

$refined_headers[] = $name.": ".$value;