PHP无法识别cURL默认GET请求

时间:2013-09-18 21:36:21

标签: php curl

我正在尝试创建一个简单的Web服务,它必须根据某些条件返回各种HTTP代码,主要是存在与通过URI请求的特定资源相关的文件。但是,当我尝试通过PHP生成404标头时,我仍然坚持一种非常奇怪的行为。

可行的第一个片段如下:

$isNotFound = TRUE;
if ($isNotFound) header('HTTP/1.1 404 Not Found');

使用简单的命令行cURL来请求运行此脚本的URI,我得到:

$ curl -LI http://www.example.com/
HTTP/1.1 404 Not Found
Date: Wed, 18 Sep 2013 20:57.25 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.3.10-1ubuntu3.8
Vary: Accept-Encoding
Connection: clse
Content-Type: text/html

现在,第二次采取是这样的:

$isNotFound = FALSE;
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $isNotFound = TRUE;
}
if ($isNotFound === TRUE) {
    header('HTTP/1.1 404 Not Found');
}

再次运行cURL,这次我明白了:

$ curl -LI http://www.example.com/
HTTP/1.1 200 OK
Date: ...

除了代码之外,标题与前者相同。为了检查显而易见的问题,我还在最后一个$isNotFound之前打印了if的值,并且它确实已评估为TRUE,因此header调用了404代码应该执行。我还在最后exit()内添加了if,在脚本末尾添加了另一个header(),并在响应中提供了其他代码(如302),结果始终是{ <{1}}内的{1}}会被忽略。

我设法通过在cURL调用中将请求方法明确指定为header来使第二个脚本工作:

if

我还怀疑cURL没有使用GET作为默认方法,但是打印$ curl -X GET -LI http://www.example.com/ HTTP/1.1 404 Not Found Date: ... 数组显示请求方法确实是GET

那么,这种奇怪行为的原因是什么?使用隐式GET方法时cURL是否有错误,或者PHP内部发生了什么?或者也许我太累了,我错过了一些微不足道的东西?

谢谢你们,对不起,我很抱歉。

1 个答案:

答案 0 :(得分:1)

下次阅读手册:

-I, --head
          (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the 
          command HEAD which this uses to get nothing  but the header of a 
          document. When used on an FTP or FILE file, curl displays the 
          file size and last modification time only.

(或您的网络服务器日志文件,或您的TCP流)