2012-10-10 5 views
0

В настоящее время у меня есть API-скрипт, который возвращает JSON. Он работал до тех пор, пока я не попытался добавить в него сценарий curl php POST. Скрипт curl работает над своим, и он также работает в скрипте API. Однако код JSON не возвращается.CURL PHP POST мешает JSON

Есть ли что-то принципиально неправильное в этом подходе ниже?

Заранее спасибо.

EDIT: сценарий curl работает на 100% самостоятельно. Сказанный скрипт также работает внутри ниже, это просто, что JSON не возвращается.

$name = "foo"; 
$age = "bar"; 

//set POST variables 
$url = 'https://www.example.com'; 

$fields = array(
      'name' => urlencode($name), 
      'age' => urlencode($age) 
     ); 

//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch);  
return json_encode(
    array(
     "status" => 1, 
     "message" => "Success!", 
     "request" => 10 
    ) 
); 
+1

_ "Однако код JSON не возвращается. "_ - затем включить отчет об ошибках, поскольку, когда' return' не вызывается, ваш код явно терпит неудачу до этого. – CodeCaster

+0

Возможно, вы хотите вместо этого использовать «эхо» JSON? –

+0

он не работает в точке foreach, но работает скрипка curl. Значения POSTED успешно –

ответ

2

Вам необходимо сделать следующее использование echo, а также использовать CURLOPT_RETURNTRANSFER если не выход будет передаваться непосредственно на страницу вместо $result

$name = "foo"; 
$age = "bar"; 
$url = 'http://.../a.php'; 
$fields = array('name' => urlencode($name),'age' => urlencode($age)); 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
$result = curl_exec($ch); 
curl_close($ch); 

header('Content-type: application/json'); 
echo json_encode(array("status" => 1,"message" => "Success!","request" => 10)); 
+0

Спасибо @Baba, Это решило проблему отказа JSON. Тем не менее, curl POST перестает работать в результате. Есть идеи? то есть 'foreach ($ fields as $ key => $ value) {$ fields_string. = $ key. '='. $ value. '&'; } rtrim ($ fields_string, '&'); 'required? Спасибо –

+0

Вам не нужно, чтобы' CURLOPT_POSTFIELDS' принимал массив tooo – Baba

+0

Я протестировал этот скрипт curl на своем собственном, и он не делает того, что мне нужно. чтобы взять «HTTP POST» только. Может ли это быть проблемой? –