Я написал функцию в 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']
он отлично работает. В чем проблема с моим кодом.
'[ 'Content-Type' => 'приложение/JSON'];' не равен '[ 'Content-Type: применение/JSON']' чек цитирует –
следующие строки уже делает это. foreach ($ headers as $ name => $ value) { $ refined_headers [] = "'". $ Name. ":". $ Value. "'"; } Поскольку это не сработало, я положил его вручную –
Я хочу сказать, что вы делаете так: - '$ headers = ['Content-Type' => 'application/json'];' который не работает. измените это на '$ headers = ['Content-Type: application/json'];' –