最近写个PHP脚本,POST一些数据给指定脚本,并且需要设置Header。
但是设置的Header不生效,为了搞明白到底哪里出了问题,做了一点学习,记录如下,备忘并供遇到同样问题的朋友参考。
(图源 :pixabay)
回显Header
为了测试我设置成Header是否成功发送,我需要一个脚本来回显Header设置,经过学习,我发现PHP自带一个函数getallheaders(),使用这个函数可以轻易获取Header信息。
简单的示例脚本如下:
<?php
foreach (getallheaders() as $name => $value) {
echo "$name: $value
";
}
?>
让我们来测试一下,浏览器直接访问上述脚本,返回如下内容:
可见上述代码工作良好,可以作为我们的测试辅助工具。
另外需要说明的是getallheaders()其实是apache_request_headers()的别名,两者是一样的。
发送Header
我使用PHP的curl 函数来完成POST。
<?php
$ch = curl_init();
$url = "http://serviceuptime.net/header_echo.php";
$headers = "Accept-Encoding: gzip, deflate";
$data = "Hello!";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$resp= curl_exec($ch);
print_r($resp);
?>
代码如上所示,但是执行上述代码后,返回代码中并没有含有我们设置的内容:
那么哪里出错了呢?通过查看curl_setopt(),我发现传递给CURLOPT_HTTPHEADER
选项的,应该是一个数组:
所以上述代码中,正确的写法应为:
$headers = array("Accept-Encoding: gzip, deflate");
再进行测试后,果然返回了我要的结果,证明Header设置成功了。
另外,既然是array,就可以设置多条Header了,这恰恰说明我们之前直接传入字符串的方法是错误的。
示例代码仅供参考
相关链接
https://steemit.com/~witnesses type in
oflyhigh
and click VOTE
Vote @oflyhigh via Steemconnect
Thank you!
补充一下:
站点的error_log已经给出了警告⚠
可惜因为是警告,不是出错,所以我没去查看😳
看来没事看看有没有error_log产生,是一个好习惯
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you so much for participating in the Partiko Delegation Plan Round 1! We really appreciate your support! As part of the delegation benefits, we just gave you a 3.01% upvote! Together, let’s change the world!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit