Conversia unei comenzi cURL pentru a fi folosita din PHP

Salutare,

De cateva zile ma chinui cu urmatoarea problema: am o comanda cURL care executata din shell functioneaza perfect si arata asa:
curl -i -H "Accept: application/json" -H "Content-Type: application/json; charset=utf-8" -H "TC: 000000" -H "ST: 000000" -X POST -d '[{"Param1" : "Value1", "Param2" : "Value2"} ]' http://www.somesaasprovider.com/

Trebuie sa o convertesc in PHP si am facut acest lucru in felul urmator:

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

$query_array = array(
    'Param1' => 'Value1',
    'Param2' => 'Value2'
);

$ch = curl_init('http://www.somesaasprovider.com');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($query_array));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
    'Content-Type: application/json; charset=utf-8',
    'Content-Length: ' . strlen(json_encode($query_array)),
    'TC' => '000000',
    'ST' => '000000')
);

if (curl_exec($ch) === false) {
	echo curl_error($ch);	
} else {
	$response = curl_exec($ch);
	$response = json_decode($response);
	print_r($response);
}

Problema este ca nu primesc nici un fel de output, nici o eroare, nimic.

Am incercat si pe Stackoverflow unde mi-au sugerat faza cu curl_error($ch).

Cel mai ciudat este faptul ca cei al caror API incerc sa-l accesez imi spun ca in varianta PHP request-ul nici macar nu ajunge pana la ei.

Aveti vreo idee de ce nu functioneaza?

Multumesc

Pentru mine curl este un fel de magie neagră, prin urmare cu religiozitate la anumiți parametri, orice ar fi.

Dar am găsit aplicația asta care îți convertește o comandă din consolă în cod PHP:


// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.somesaasprovider.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "[{\"Param1\" : \"Value1\", \"Param2\" : \"Value2\"} ]");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/json; charset=utf-8";
$headers[] = "Tc: 000000";
$headers[] = "St: 000000";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
2 Likes

$query_array e greșit. Ar trebui să fie

$query_array = array(array(
    'Param1' => 'Value1',
    'Param2' => 'Value2'
));

pentru ca

json_encode($query_array);

să fie egal cu

[{"Param1" : "Value1", "Param2" : "Value2"} ]
1 Like

Foarte tare! A mers :slight_smile:

Cred ca era de la faza cu CURLOPT_HTTPHEADER, mai exact modalitatea in care erau trimisi acei parametri pentru header.

Multumesc.

@IonutBotizan si aia, da.