2016-06-09 10 views
0

Я пытаюсь использовать curl, используя терминал, работает хорошо, и он возвращает строку Ok или fail.Преобразование curl в PHP

curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"username","password":"password"}' https://123.123.123.123:1234/session 

Когда я пытаюсь конвертировать в него, не работает.

<?php 
$data = array("username" => "username", "password" => "password"); 

$data_string = json_encode($data); 

$ch = curl_init("https://123.123.123.123:1234/apicall"); curl_setopt_array($ch, array(CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => array('Content-Type: application/json', 'Content-Length: ' . strlen($data_string))), CURLOPT_POSTFIELDS => $data_string, CURLOPT_RETURNTRANSFER => true)); 

$result = curl_exec($ch); //Make it all happen and store response 

?> 

ответ

0

curlopt_postfields принимает массив, так что вам не нужно json_encode массив данных:

CURLOPT_POSTFIELDS => $data 

Посмотреть больше информации о curlopt опций:

Этот параметр может быть либо принят как строка с urlencoded, как 'para1 = val1 & para2 = val2 & ...' или как массив с полем na я как ключ и данные поля как значение.

У вас также было слишком много закрывающих круглых скобок в вашем примере, и вы не закрывали соединение. Полный код:

<?php 
$data = array("username" => "username", "password" => "password"); 

$ch = curl_init("https://123.123.123.123:1234/apicall"); 
curl_setopt_array(
    $ch, 
    array(
     CURLOPT_CUSTOMREQUEST => "POST", 
     CURLOPT_HTTPHEADER => array(
      'Content-Type: application/json', 
      'Content-Length: ' . strlen($data) 
     ), 
     CURLOPT_POSTFIELDS => $data_string, 
     CURLOPT_RETURNTRANSFER => true 
    ) 
); 

$result = curl_exec($ch); 

curl_close($ch); 
+0

должен изменить «Content-Length:». strlen ($ data_string) и CURLOPT_POSTFIELDS => $ data_string –

Смежные вопросы