我正在使用curl_setopt在我的请求中设置标头。 具体来说,我想这样做,所以标题包括使用什么样的授权。
// Define headers to use
$header = array(
'HTTP/1.1',
'Content-type: text/plain',
'Authorization: Basic ' . base64_encode("$username:$password")
);
// Below I prepare the request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);;
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // set custom header
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code
if (curl_errno($ch)) {
echo 'CURL Error: ' . curl_error($ch);
}
$result=curl_exec ($ch);
echo $result;
curl_close ($ch);
我的用例是运行tcpdump来分析标题(通过查找字符串“Authorization:Basic”,从而得到username64的base64编码:密码
因此,当这个php程序将此请求发送到$ URL(通过加载此程序的页面)时,TCP Dump应该检测到发送的base64编码,对吗?
然而,tcpdump没有拾取标题,我认为这是因为我没有正确设置标题。
答案 0 :(得分:1)
您需要执行curl请求。
$result = curl_exec($ch);
//remember to close the connection too
curl_close($ch).
如果您不拨打curl_exec()
,则永远不会发送请求,因此永远不会发送标题。
答案 1 :(得分:1)
对我来说还不错。但是,使用CURLOPT_USERPWD时不需要Authorization标头,因为它将覆盖任何现有的Authorizations标头。在标题数组中。
建议通过将curl请求发送到http://requestb.in来调试你。
答案 2 :(得分:0)
您设置HTTP标头的方式是正确的 在你完成之后,你忘了打电话给{{1}}吗?
答案 3 :(得分:0)
你必须先运行curl_exec:
$result=curl_exec ($ch);
然后检查状态代码:
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code
if (curl_errno($ch)) {
echo 'CURL Error: ' . curl_error($ch);
}