当然,我已经阅读了几个与此完全相关的问题,但我不得不说这对我来说根本不起作用。我要完成的是
- 通过 PHP 和curl 发送“X-Requested-With: XMLHttpRequest” header
- 通过PHP和curl发送其他http请求 header
提供的解决方案对我不起作用。
我如何知道我没有发送正确的 http 请求 header ?
简单地通过
(1)比较 XMLHttpRequest 生成的真实 header (触发 JQuery 点击)与 Firefox 附加组件 Live HTTP headers 中 PHP 和curl 模拟的 header
(2)Print_r() - 目标脚本中的 $_SERVER 变量
我得到的结果是不正确/低于我的预期的?
首先也是最重要的: Firefox Live HTTP header 不会捕获我的 header (就像它们不存在一样)。
第二,通过 print_r($_SERVER):
如果我得到任何模拟 header ,我会得到[HTTP_X_REQUESTED_WITH] => XMLHttpRequest
- 不是: [X_REQUESTED_WITH] => XMLHttpRequest
.
对于我通过curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header)发送的任何 header ,这个问题几乎仍然存在 - 其中任何一个 header 都带有“HTTP”前缀(“Header1:value1” - 我得到“HTTP_HEADER1”)。
我正在将 XAMPP 与 PHP 版本 5.4.7、CURL 7.24.0 结合使用。
在我询问我想要完成的任务是否可能并提前感谢您的回复之前,提供我的代码并不是一个坏主意 - 我的众多代码解决方案之一已经尝试过。
$curl_header = array('X-Requested-With: XMLHttpRequest');
$data = "name=miloshio"; // just to be sure I'm doing the POST request
$ch = curl_init('http://example.com/test.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
echo $result;
我的问题总结:
- 是否可以准确发送“X-Requested-With: XMLHttpRequest” 通过 PHP 和curl header ?
- 是否可以避免将“HTTP_”前缀附加到自定义 header 通过PHP 和curl 发送?
- 使用 PHP 和 curl 是否存在众所周知的限制?
最佳答案
Firefox Live HTTP header 不会显示您的 header ,因为它们是由服务器发送到另一台服务器而不是客户端(浏览器)。
Curl 使用 CURLOPT_PROXY 正确发送 header 您可以尝试将curl流量通过调试代理,例如Fiddler如果您使用 Windows 进行开发,我确信有 Linux 替代品
如果您尝试从 $SERVER 变量获取 header ,它们将以 HTTP 为前缀,您可以使用 apache_request_headers获取不带 HTTP_ 前缀的 header 。
关于php - 通过 CURL 发送 'X-Requested-With: XMLHttpRequest' 和其他 header - 其他方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13107837/