HTTP GET + 自定义 header

HTTP GET + custom header

无法生成带有自定义 header 的 GET 请求。

我在服务器上有一个非常简单的PHP-file:

<?php

if (empty($_GET['test']))
    {
        echo('0');
    }
else
    {
        echo('1');
    }
?>

我试过了TIdHTTP:

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdHttp1.Request.CustomHeaders.AddValue('test', 'text');
  Memo1.Text:= IdHttp1.Get('https://example.com');
end;

THTTPClient:

procedure TForm1.Button1Click(Sender: TObject);
begin
  NetHTTPClient1.CustHeaders.Add('test', 'text');
  //NetHTTPClient1.CustomHeaders['test'] := 'text';
  Memo1.Text:= NetHTTPClient1.Get('https://example.com', nil).ContentAsString;
end;

但文档仅呈现为 0/var/log/apache2/error.log 包含:

PHP Notice:  Undefined index: test in /var/www/html/index.php on line 3

好像CustomHeaders['test']是空的。为什么?

您混淆了 headers 参数:

  • $_GET contains all parameters 当使用 HTTP 方法 GET 时。这始终是查询地址本身:在 http://myserver.net/mysite.php?test=hell&other=world 中,您将拥有参数 testother 及其各自的值。
  • $_SERVER contains all headers。 Headers 是随请求和响应一起发送的内容。 Cookie 总是 headers:
    Connection: keep-alive
    Accept-Ranges: bytes
    Set-Cookie: p=a; domain=.whosebug.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
    

如果你想发送和访问参数,那么只需将它们添加到你请求的地址:

IdHttp1.Get('https://example.com?test=text');

如果你想访问 HTTP headers 那么就这样做而不是期待参数:

if (empty($_SERVER['test']))