php - массив разноски через CURLOPT_POSTFIELDS - PullRequest
0 голосов
/ 07 августа 2020

Я часто публикую сообщения через PHP CURL. Как правило, мы отправляем сообщения на серверы, которые ожидают прямой HTTP POST или JSON. Итак, мы создаем параметры как массив ... а затем json_encode массив или http_build_query массив ... и отправляем результат в CURLOPT_POSTFIELDS. Кто-то запрограммировал для нас несколько веб-страниц ... и они разместили данные формы через дополнительную страницу, отправив массив $ _POST на наш сервер ... и это сработало! Конечно, достаточно я просмотрел спецификации для CURLOPT_POSTFIELDS ... и он может принимать строку или массив. Итак, я запутался ... почему кажется, что протокол заключается в преобразовании массива в строку с помощью http_build_query, когда можно просто опубликовать массив (по крайней мере, если он одномерный)? Это только из-за побочного преимущества кодирования URL http_build_query .... или есть другая причина?

PS Когда массив содержал параметр, который был полным URL-адресом, то есть с запросом, например http://example.com?a=1&b=2&c=3 сервер прочитал данные нормально, даже если параметр не был закодирован URL ... или отправка массива автоматически urlencode элементов массива?

Ответы [ 2 ]

1 голос
/ 08 августа 2020

Тип значения, передаваемого в CURLOPT_POSTFIELDS, влияет на Content-type вашего запроса. Если CURLOPT_POSTFIELDS является массивом, тип содержимого вашего запроса будет multipart/form-data.

Если CURLOPT_POSTFIELDS является строкой application/x-www-form-urlencoded.

Теперь, что произошло (из вашего вопроса), PHP может определять ваши параметры POST независимо от типа содержимого. Таким образом, оба способа отправки запроса пройдут.

Вы также можете взглянуть на этот вопрос , чтобы узнать, что лучше для какой ситуации. Другая ссылка

0 голосов
/ 07 августа 2020

передача любых данных через http (s) - это передача strings, это протокол text transfer, даже если вы явно не конвертируете массив в строку (с помощью json_encode () или http_build_query ()) cURL сделает это для ты.

...