web-dev-qa-db-ja.com

CURLOPT_POSTFIELDSに配列データを含める方法は?

私は基本的にPHPでHTMLフォームを処理し、それをストレージと処理のために他の場所に送信しています。しかし、curlを介して配列リストを送信することに問題があります。そのような方法で実行する必要があります。受信サーバーに到達すると、入力フォームから直接来たかのようになります。

配列をシリアル化しても関数を使用してもエラーは発生しませんが、サーバーで配列を読み取れなくなるため、HTMLフォームから送信されたかのように投稿形式を維持する必要があります。

私はコハナを使用していますが、Curlの原則は同じです。これが私のコードです。

            $path = "/some/process/path";
            $store = "http://www.website.com";

            $url = $store . $path;

            $screenshots = array();
            $screenshots[0] = 'image1.jpg';
            $screenshots[1] = 'image2.jpg';
            $screenshots[2] = 'image3.jpg';

            $videoLinks = array();
            $videoLinks[0] = 'video1.wmv';
            $videoLinks[1] = 'video2.wmv';

            $params = array(
                'id' => '12',
                'field1' => 'field1text',
                'field2' => 'field2text',
                'field3' => 'field3text',
                'screenshots' => $screenshots,
                'videoLinks' => $videoLinks,
            );

            $options = array(
                CURLOPT_HTTPHEADER => array("Accept: application/json"),
                CURLOPT_TIMEOUT => 30,
                CURLOPT_POST => TRUE,
                CURLOPT_POSTFIELDS => $params,
            );

            $data = Remote::get($url, $options);
            $json = json_decode($data);

乾杯。

21
diggersworld
CURLOPT_POSTFIELDS => http_build_query($params),

http://php.net/manual/en/function.http-build-query.php

53
delphist

私はhttp_build_query()の代替を共有したかっただけです

CURLOPT_POSTFIELDSで配列入力を含めるには、各サブ配列項目を個別に指定します。

の代わりに...

$videoLinks = array();
$videoLinks[0] = 'video1.wmv';
$videoLinks[1] = 'video2.wmv';

$params = array(
    ...
    'videoLinks' => $videoLinks;
    ...
);

... これを行う ...

$params = array(
    ...
    'videoLinks[0]' => 'video1.wmv';
    'videoLinks[1]' => 'video2.wmv';
    ...
);
6
klkl

私はcURLとそのPHPバージョンの初心者ですが、私の知る限り、オプションで配列をうまく実行できます。配列の配列を送信する場合は、そのことを忘れないでください。 field => values次に、適切な解釈のためにContent-Typeヘッダーをmultipart/form-dataに設定する必要があります。つまり、paramsの配列の形式が正しくありません。最終的な配列値の後に余分なコンマがあります。何が悪いのか。

1
Minion