2

当然,我已经阅读了几个与此问题完全相同的问题,但我不得不说它根本不适合我。我即将完成的是

  • 通过 PHP 和 curl 发送“X-Requested-With: XMLHttpRequest”标头
  • 通过 PHP 和 curl 发送其他 http 请求标头

提供的解决方案对我不起作用。

我怎么知道我没有发送正确的 http 请求标头?

只需通过

(1)比较XMLHttpRequest(触发JQuery点击)生成的真实headers和Firefox add-on Live HTTP headers中PHP和curl模拟生成的headers

(2)Print_r() - 目标脚本中的 $_SERVER 变量

我得到什么不正确/低于我的预期?

首先也是最重要的:Firefox Live HTTP 标头不会捕获我的标头(就像它们不存在一样)。

其次,通过 print_r($_SERVER):

如果我得到任何模拟标题,我得到[HTTP_X_REQUESTED_WITH] => XMLHttpRequest-而不是: [X_REQUESTED_WITH] => XMLHttpRequest。对于我通过 curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_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;

我的问题总和:

  1. 是否可以通过 PHP 和 curl 准确发送“X-Requested-With: XMLHttpRequest”标头?
  2. 是否可以避免将“HTTP_”前缀附加到 PHP 和 curl 发送的自定义标头?
  3. 使用 PHP 和 curl 是否存在众所周知的限制?
4

1 回答 1

2
  1. Firefox Live HTTP 标头不会显示您的标头,因为它们是由服务器发送到另一台服务器而不是客户端(浏览器)的。

  2. Curl 使用CURLOPT_PROXY正确发送标头如果您使用 Windows 进行开发,您可以尝试通过Fiddler等调试代理放置 curl 流量,我确信有 linux 替代品

  3. 如果您尝试从 $ SERVER 变量中获取标头,它们将以 HTTP 为前缀,您可以使用apache_request_headers获取没有 HTTP_ 前缀的标头。

于 2012-10-29T09:30:35.350 回答