Код, который я пишу с помощью / usr / bin / curl, работает, но код, который я пишу с помощью php curl, не работает.Где я делаю ошибку? - PullRequest
0 голосов
/ 30 декабря 2018

Я написал два сценария кода ниже на терминале, над которым я работаю, я пишу с php, он не работает, и я получаю предупреждение о пропущенном параметре.

Terminal: /usr/bin/curl -s -X POST "https://api.xxxxxxx.com/action.json?type=modifycontact&resellerno=3040267&resellerpwd=xxxxxxx&lang=tr&responsetype=json" -d "registrycode=81386095&ownercontactid=81045261&admincontactid=81045261&billcontactid=81045261&techcontactid=81045261"

PHP: 
$url = "https://api.xxxxxxx.com/action.json?type=modifycontact&resellerno=3040267&resellerpwd=xxxxxxx&lang=tr&responsetype=json";
$value = "registrycode=81386095&ownercontactid=81045261&admincontactid=81045261&billcontactid=81045261&techcontactid=81045261";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $value);
        curl_setopt($ch, CURLOPT_HEADER, FALSE); 
        curl_setopt($ch, CURLOPT_NOBODY, FALSE); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        //$son = array();
        $sonlu = curl_exec($ch);
        $son['sonuc'] = (isset($sonlu) AND !empty($sonlu)) ? $sonlu : json_encode($sunucuhata);
        $son['httpcode'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $son['error'] = curl_error($ch);
        $son['errorno'] = curl_errno($ch);
        curl_close($ch);
print_r($son);

Terminal response: {"status":"success","description":"OK"}

PHP response: Array
(
    [sonuc] => {"status":"error","description":"4553 missing parameter"}
    [httpcode] => 200
    [error] => 
    [errorno] => 0
)

1 Ответ

0 голосов
/ 30 декабря 2018

Сообщение об ошибке не приходит от curl, это ответ API.Так что API нужно что-то.

Вы можете проверить, есть ли документация для этого API, которая объясняет сообщение об ошибке более подробно.

Единственное отличие, которое я вижу между терминалом curl и php: php не устанавливает заголовок USER AGENTпо умолчанию.Возможно, этот заголовок отсутствует в вашем запросе.Я не знаю вашу версию curl, но что-то вроде этого могло бы работать:

 curl_setopt($ch, CURLOPT_USERAGENT, 'curl/7.61.1');

ОБНОВЛЕНИЕ: , как упомянуто hanshenrik

 curl_setopt($ch, CURLOPT_USERAGENT, 'curl/' . curl_version()['version']);
...