我正在构建一个休息 api 服务器,我正在尝试将 curl 请求中的 Content-Md5 标头发送到 api 服务器。我对如何计算 md5 哈希以发送请求和放置感到困惑?我们不需要 GET 和 Delete 的标头,对吧?
问问题
16647 次
1 回答
6
您不需要为任何不包含正文的请求提供标头。这意味着在实践中,假设一个简单的 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()
tohttp_build_query()
并更改Content-Type:
标题。
于 2013-04-11T09:00:21.367 回答