oflyhigh avatar

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

oflyhigh

Published: 06 Sept 2019 › Updated: 06 Sept 2019每天进步一点点:PHP  POST以及设置Header的一点探索

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

最近写个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了,这恰恰说明我们之前直接传入字符串的方法是错误的。

示例代码仅供参考

相关链接


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

Vote @oflyhigh via Steemconnect
Thank you!

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

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh