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

306
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

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

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

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

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

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

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

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

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

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

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

271