每天进步一点点:PHP  POST以及设置Header的一点探索

每天进步一点点:PHP POST以及设置Header的一点探索

最近写个PHP脚本,POST一些数据给指定脚本,并且需要设置Header。

但是设置的Header不生效,为了搞明白到底哪里出了问题,做了一点学习,记录如下,备忘并供遇到同样问题的朋友参考。


(图源 :pixabay)

回显Header

为了测试我设置成Header是否成功发送,我需要一个脚本来回显Header设置,经过学习,我发现PHP自带一个函数getallheaders(),使用这个函数可以轻易获取Header信息。

简单的示例脚本如下:

1
2
3
4
5
6
<?php
foreach (getallheaders() as $name => $value) {
echo "$name: $value
";
}
?>

让我们来测试一下,浏览器直接访问上述脚本,返回如下内容:

可见上述代码工作良好,可以作为我们的测试辅助工具。

另外需要说明的是getallheaders()其实是apache_request_headers()的别名,两者是一样的。

发送Header

我使用PHP的curl 函数来完成POST。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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了,这恰恰说明我们之前直接传入字符串的方法是错误的。

示例代码仅供参考

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘每天进步一点点:PHP POST以及设置Header的一点探索’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×