通过CURL发送'X-Requested-With:XMLHttpRequest'和其他标题 - 其他方式?

时间:2012-10-28 09:54:02

标签: php curl header http-headers xmlhttprequest

当然,我已经完全按照这个问题阅读了几个问题,但我不得不说它根本不适用于我。我要完成的是

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

如果解决方案对我不起作用。

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

简单地通过

(1)比较XMLHttpRequest生成的真实头文件(触发JQuery点击)和PHP模拟的头文件以及Firefox附加Live HTTP头文件中的curl

(2)目标脚本中的Print_r()-ing $ _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. 是否可以准确发送'X-Requested-With:XMLHttpRequest' 通过PHP和curl的标题?
  2. 是否可以避免将“HTTP_”前缀附加到自定义标头 用PHP和curl发送?
  3. 在使用PHP和curl方面是否存在众所周知的限制?

1 个答案:

答案 0 :(得分:2)

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

  2. 使用CURLOPT_PROXY卷曲正确发送标题如果您使用Windows进行开发,可以尝试通过debuging代理(例如Fiddler)放置curl流量,我确定有linux替代品

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