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

361
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

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

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

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

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

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

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

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

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

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

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

325