Я отправляю запрос POST по URL-адресу. Он корректно работает в Python, но в PHP-завиток, я всегда получаю плохую ошибку запроса (то есть мои данные POST не как ожидалось сервером)конвертировать запрос python в эквивалент PHP-cURL
Python код: (. Работает правильно 200 OK)
import httplib, urllib, json
def SendRequest(param1):
url = "api.xyz.com"
body = {"version": "1.0", "data":[{"param1":param1, "age":35}]}
jsonBody = json.dumps(body)
headers = {"Content-type": "application/json",
"Accept": "application/json; charset=utf8"}
conn = httplib.HTTPConnection(url)
conn.request("POST", "/api/?client_id=xx-xx-xx", jsonBody, headers)
response = conn.getresponse()
PHP-Curl код (не работает. 406 Bad ошибки запроса)
function sendCurlRequest($param1)
{
$payload = preparePayload($param1);
$url = "http://api.xyz.com/api/?client_id=xx-xx-xx";
$jsonResponse = executePOSTRequest($url, $payload);
$response = json_decode($jsonResponse);
}
function preparePayload($param1)
{
$payload = array("version" = "1.0",
"data" => array(array("param1" => $param1,
"age" => 35
)
),
);
$jsonPayload = json_encode($payload);
return $jsonPayload;
}
function executePOSTRequest($url, $payload)
{
$newlines = array("\r", "\n", " ");
$url = str_replace($newlines, '', $url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HTTPHEADERS,array('Content-Type:application/json; Accept: application/json; charset=utf8'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
}
Я знаю, что есть какая-то ошибка в моем использовании завитка. Пожалуйста, предложите.
Update: Использование двойного массива в PHP потому, что сервер ожидает строку JSON (POST полезной нагрузки) в этом формате
{
"version": "1.0",
"data":
[{"param1":name, "age":35},{"param1":name,"age":60}]
}
В Python, я использую список Словаре; В php я думаю, что это только массив массивов.
Я уверен, что ваша проблема в том, что исходный код Python посылает чистый JSON тело, и PHP версии размещая различные значения как поля POST. Я не знаю, как отправить чистое тело JSON, но я уверен, что ответ находится здесь, на SO –
Pekka, thx для вашего комментария, но я думаю, что в обоих случаях я отправляю строку JSON как данные POST. Вы имеете в виду, что в php моя строка JSON разбивается на части и каждое поле отправляется как поля формы? это не может быть так. –