Запрос PHP Curl не работает вне среды Postman - массив формданных - PullRequest
0 голосов
/ 25 мая 2018

Используя следующий код:

   $curl = curl_init();</p>

<code>curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.sample.com/v2/clients?token=DMfJjzWLngIn0JBHA0gWcg",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"active_registration_id\"\r\n\r\n123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"language_id\"\r\n\r\n79\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"archived\"\r\n\r\n{{archived}}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"enabled\"\r\n\r\n{{enabled}}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\nSamplePassword\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password_confirmation\"\r\n\r\nSamplePassword\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[first_name]\"\r\n\r\nJustin\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[last_name]\"\r\n\r\nTrudeau\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[email]\"\r\n\r\nemail@sample.com\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[telephone_1]\"\r\n\r\n555-555-5555\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[date_of_birth]\"\r\n\r\n1943-10-10\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[gender]\"\r\n\r\nMale\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[referral_code]\"\r\n\r\nAmple Clinic 123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[status]\"\r\n\r\nRegistration Pending\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"For Additional Permitted Parameters:\"\r\n\r\nSee Registration Parameters\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[date_of_birth]\"\r\n\r\n1943-10-10\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[gender]\"\r\n\r\nMale\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[referral_code]\"\r\n\r\nAmple Clinic 123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"registration_attributes[status]\"\r\n\r\nRegistration Pending\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; ",
  CURLOPT_HTTPHEADER => array(
    "Content-Type: application/x-www-form-urlencoded",
    "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Я получаю ответ {"registration_attributes": ["Missing"]} Этот код будет работать в Почтальоне, ноне на производственном сервере.Что-то не так с тем, как я создаю массив registration_attributes?

1 Ответ

0 голосов
/ 26 мая 2018

ваша строка CURLOPT_POSTFIELDS выглядит как неполная, обрезанная, но в любом случае это дерьмовый способ выполнить запрос multipart / form-data в PHP, гораздо проще просто позволить php / libcurl создать запрос multipart / form-dataдля тебя.который в вашем случае будет выглядеть примерно так:

curl_setopt ( $ch, CURLOPT_POSTFIELDS, array (
        "active_registration_id" => 123,
        "language_id" => 79,
        "archived" => "{{archived}}",
        "enabled" => "{{enabled}}",
        "password" => "SamplePassword",
        "password_confirmation" => "SamplePassword",
        "registration_attributes" => array (
                "first_name" => "Justin",
                "last_name" => "Trudeau",
                "email" => "email@sample.com",
                "telephone_1" => "555-555-5555",
                "date_of_birth" => "1943-10-10",
                "gender" => "male",
                "referral_code" => "Ample Clinic 123",
                "Status" => "Registration Pending" 
        ),
        "For Additional Permitted Parameters:" => "See Registration Parameters", 
        // ...
) );

и избавится от обоих заголовков по разным причинам: "Content-Type: application/x-www-form-urlencoded" - этот заголовок лживый, это не формат x-www-form-urlencoded, этополностью несовместимый формат "multipart / form-data"."content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" - curl установит этот заголовок автоматически, и с другой (сгенерированной случайным образом) границей, если вы установите границу вручную, сервер не сможет ее проанализировать.(поскольку граница, указанная в заголовках, будет неправильной)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...