我正在构建一个rest api服务器,我正在尝试将curl请求中的Content-Md5头发送到api服务器。我很困惑如何计算md5哈希发送请求发送和放?我们不需要GET和删除标题吗?
答案 0 :(得分:5)
您不需要为任何不包含正文的请求提供标头。这意味着在实践中,假设使用简单的CRUD API,您只需要担心PUT
和POST
个请求,GET
和DELETE
赢得了需要包含它。
要包含的MD5哈希是通过md5()
函数完整地传递请求主体来计算的(在PHP中)。使用cURL时,这意味着您必须手动将请求主体构造为字符串 - 您不能将数组长时间传递给CURLOPT_POSTFIELDS
。
假设我想将以下数组发送到服务器:
$array = array(
'thing' => 'stuff',
'other thing' => 'more stuff'
);
如果我想将其作为JSON发布,我会这样做:
$body = json_encode($array);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($body),
'Content-MD5: ' . base64_encode(md5($body, true))
));
// ...
同样,如果我想将其发送为application/x-www-form-urlencoded
,我只需将json_encode()
更改为http_build_query()
并更改Content-Type:
标题。