Думаю, мне хотелось бы знать, возможно ли в этом же сообщении тип контента POST multipart/data-form, содержащий json, files, txt, xml. поэтому запрос будет выглядеть так:
Content-Type: multipart/form-data; boundary=BOUNDARY
--BOUNDARY
Content-type:application/json
Content-Disposition:form-data
{{"SomeJsonObject":"valueOfObject"}}
--BOUNDARY
Content-type:application/xml
Content-Disposition:form-data
<node>SomeXML Nodes</node>
--BOUNDARY--
Я знаю, что могу кодировать это как строку, включать границы вручную, но я хочу знать, возможно ли это через
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
спасибо
нет возможности публиковать данные STRING в POST, кроме границ здания, но curl может публиковать файлы с диска, поэтому
file_put_contents('/tmp/fileForSend.json');
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'file' =? '@/tmp/fileForSend.json;type=application/json', // this is CURL integrared feature, curl will read file itself
));
поэтому установка "@" sybmol означает CURL, что он должен читать файл и помещать его содержимое в запрос POST
Вы также можете передать Content-Type на каждую многостраничную границу с помощью этого хака:
$url = 'https://...'
$data = ["json\";\nContent-type:\"application/json\";\nContent-disposition:\"form-data" => '{"my":json}',
"xml\";\nContent-type:\"application/xml\";\nContent-disposition:\"form-data" => "<root/>"];
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($resource, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($resource);
curl_close($resource);
Идея состоит в том, чтобы "вводить" все необходимые заголовки в "имя", например, в SQL-инъекцию.
Вышеупомянутый код отправит многопрофильный запрос со всеми необходимыми заголовками:
------------------------------b66e31048210
Content-Disposition: form-data; name="json";
Content-type:"application/json";
Content-disposition:"form-data"
{"my":json}
------------------------------b66e31048210
Content-Disposition: form-data; name="xml";
Content-type:"application/xml";
Content-disposition:"form-data"
<root/>
Но будьте осторожны, этот материал очень плохо документирован.