Как в curl отправить данные request payload?

312
14 июля 2017, 05:57

Здравствуйте! В отладчике хрома вижу response с нужными мне параметрами

{"d":{"__type":"PremiumSSS_Download_Model+PreviewResult","DownloadUrl":"http://www.solidcomponents.com/company/out/6573770/3dpreview.3dxml","PartNumber":"i24-45","ErrorMessage":null}}

При просмотре запроса вижу, что запрос отправляется вместе с некоторым json-кодом, который отображается в блоке request payload:

{Names: ["Supply_Voltage", "Output_Current"], Values: ["24", "45"], ModelId: 778860, CatalogId: 11614,…}

Далее составляю запрос, в который передаю json в виде post:

$payload = '{Names: ["Diam_Hole"], Values: ["0,12500"], ModelId: 663563, CatalogId: 11291, View2D: "2", Config: "",…}';
echo $page = requestPage('https://www.sait.com/premiumsss-download-model.aspx/GetModelPreviewUrl', $payload); 

Сама функция запроса:

function requestPage( $url, $post = null ){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt( $ch, CURLOPT_ENCODING, "UTF-8" );
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64)    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36');
curl_setopt($ch, CURLOPT_COOKIEJAR, 
$_SERVER['DOCUMENT_ROOT'].'/tmp/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 
$_SERVER['DOCUMENT_ROOT'].'/tmp/cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
                'Content-Type: application/json; charset=UTF-8', 
                'X-Requested-With: XMLHttpRequest',
                'Accept-Encoding: gzip, deflate',
                'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
                'Accept: application/json, text/javascript, */*; q=0.01',
                'Connection:keep-alive',
                'Origin: http://site.com',
                ]);

if( $post ){
  curl_setopt( $ch, CURLOPT_POSTFIELDS, $post );
}

if (($html = curl_exec($ch)) == false && $html == '')
{
    echo 'Ошибка curl: ' . curl_error($ch);
}
curl_close( $ch );
return $html;
}

В итоге получаю ошибку {"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""} Надо сказать практически этой же функцией прохожу авторизацию на сайте, но этот запрос с новым post, который берется из payload не работает. Что я делаю не так?

READ ALSO
Запись регулярно выражения Mysql

Запись регулярно выражения Mysql

Вот пример регулярного выражения

193
Изменить белый цвет фона изображения

Изменить белый цвет фона изображения

Как заменить фон белого цвета картинки средствами php?

295
Ошибка при миграции OpenCart

Ошибка при миграции OpenCart

ПриветПеренёс свой свйт OpenCar с shared-хостинга на VPS, изменил конфиг

180
Как перезапросить форму отправки?

Как перезапросить форму отправки?

Как в данном случае перезапросить форму отправки, чтобы при обновлении страницы не было сообщения "Подтвердите повторную отправку формы"mywebforyou

278