簡體   English   中英

使用curl_setopt發布數組

[英]Posting an array with curl_setopt

附加的代碼返回“注意:數組到字符串轉換...”。 只是我的數組被作為包含“Array”字符的字符串處理到遠程服務器。 其余的變量都很好。

如何在沒有這個問題的情況下傳遞我的數組$anarray

<?php

$data = array(
    'anarray' => $anarray,
    'var1' => $var1,
    'var2' => $var2
 );

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "MY_URL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

?>

使用http_build_query()

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// The values of variables will be shown but since we don't have them this is what we get

然后,您可以使用$_POST超全局正常訪問它

實現目標的最佳方法是使用http_build_query()

來自http://www.php.net/manual/en/function.curl-setopt.php CURLOPT_POSTFIELDS的描述

要在HTTP“POST”操作中發布的完整數據。 要發布文件,請在文件前加上@並使用完整路徑。 可以通過使用格式為'; type = mimetype'的類型的文件名來明確指定文件類型。 此參數可以作為urlencoded字符串傳遞,如'para1 = val1&para2 = val2&...',也可以作為數組傳遞,字段名稱為鍵,字段數據為值。 如果value是數組,則Content-Type標頭將設置為multipart / form-data。 從PHP 5.2.0開始,如果使用@前綴將文件傳遞給此選項,則value必須是數組。

由於HTTP協議的性質以及curl_setopt函數的工作方式,$ anarray不能直接作為數組傳遞。

以下聲明:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

獲取一系列POST參數,對於每個參數,必須有一個字符串名稱和一個STRING值。 您正在傳遞一個數組值,因此PHP處理器被迫使用一些蹩腳的內置算法將其轉換為字符串,這會產生前面提到的通知(“數組轉換為字符串轉換...”)。

因此,為了將該數組($ anarray)正確傳遞給另一方,您必須自己處理其編碼(到字符串中),以及另一方必須處理其解碼(從字符串開始) )。

我在這種情況下的方法是JSON。 它幾乎適用於所有情況。 您所要做的就是應用以下技術:

$data=array(
    'anarray'=>json_encode($anarray),
    'var1'=>$var1,
    'var2'=>$var2
    );

然后,在連接的另一端,您將通過以下方式檢索原始數組:

$anarray=json_decode($_POST['anarray'],true); // true indicates for associative array rather than an object

如果$ anarray是一個數組,我懷疑它是,它不應該是。 通過連接或任何適當的方法將其轉換為字符串。

編輯:見Eric Butera的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM