没有使用curl_setopt PHP设置标头

时间:2015-10-27 02:44:12

标签: php curl basic-authentication tcpdump http-basic-authentication

我正在使用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没有拾取标题,我认为这是因为我没有正确设置标题。

4 个答案:

答案 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);
}