2
如何在PHP中使用Curl設置此標頭? (CustomInfo元件陣列(嵌套密鑰值對)和AuthenticationInfo元件陣列(嵌套密鑰值對))PHP Curl HTTP POST REQUEST設置自定義標頭與嵌套鍵值對
<xml bla bla...>
<Header>
<CustomInfo>
<IsTestMessage>true</IsTestMessage>
<IsContentCompressed>false</IsContentCompressed>
</CustomInfo>
<AuthenticationInfo>
<ApplicationId>SomeId</ApplicationId>
<VersionId>0.9</VersionId>
<RelationId></RelationId>
<UserId>SomeUserId</UserId>
<Password>SomePassword</Password>
</AuthenticationInfo>
</Header>
<Body>
<!--etc...(actual xml)-->
</Body>
</xml bla bla...>
通常我會做:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/process.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); //Body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = 'key: value';
$headers[] = 'key2: value2';//and so on...
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
curl_close ($ch);
print $server_output ;
但是這是怎麼做當標題包含嵌套的鍵值對?
編輯1:
使用這種方式時,但不工作(真正的牛逼,所以我必須這樣做是錯誤):
$headers = array();
$headers[] = array('CustomInfo' => array(
'IsTestMessage' => "true",
'IsContentCompressed' => "false")
);
$headers[] = array('AuthenticationInfo' => array(
'ApplicationId' => "SomeId",
'VersionId' => "0.9",
'RelationId' => "",
'UserId' => "SomeUserId",
'Password' => "SomePassword"
)
);
$headers = serialize($headers);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
警告:curl_setopt():你必須通過任一對象或陣列與CURLOPT_HTTPHEADER參數
編輯2:
當我不序列化$頭,我得到:
注意:數組字符串轉換
THX的男人!要立即嘗試。 – Sake
沒有工作(一定是做錯了) 看到我的編輯... – Sake
這實際上是一個特定的要求,從外部的API,這些元素被放置在標題.. 公平......我正在嘗試做肥皂後請求。 但是我一直試圖做到這一點,而不使用PHP soapclient,但自己建立原始郵政(出於多種原因) 但是,爲了實現這一點,我需要建立自定義標題(如上所述) – Sake