如果解决方案对我不起作用。
我怎么知道我没有发送正确的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;
我的问题总结:
答案 0 :(得分:2)
Firefox Live HTTP标头不会显示您的标头,因为它们是由服务器发送到另一台服务器而不是客户端(浏览器)。
使用CURLOPT_PROXY卷曲正确发送标题如果您使用Windows进行开发,可以尝试通过debuging代理(例如Fiddler)放置curl流量,我确定有linux替代品
如果您尝试从$ SERVER变量获取标头,它们将以HTTP 为前缀,您可以使用apache_request_headers来获取没有HTTP_前缀的标头。