【问题标题】:How to send apache headers via php like this method ?如何像这种方法一样通过 php 发送 apache 标头?
【发布时间】:2016-09-13 16:00:43
【问题描述】:

我有一个应用程序可以生成几个 apache 原始文件,如下所示,我如何将所有这些文件用作对 php 的请求?据我所知,我们可以像header("Location: http://www.example.com/"); 一样单独调用它们,但是我们如何通过这样的一个命令调用它们? (只是举例)

<?php
        header("http://example.com/test.php

            POST test.php HTTP/1.1
            Host: example.com
            User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:48.0) Gecko/20100101 Firefox/48.0
            Accept: application/json, text/javascript, */*; q=0.01
            Accept-Language: en-US,en;q=0.5
            Accept-Encoding: gzip, deflate, br
            Content-Type: application/x-www-form-urlencoded; charset=UTF-8
            X-Requested-With: XMLHttpRequest
            Referer: http://example.com/test/
            Content-Length: 87
            Cookie: __cfduid=somevalue; 
            Connection: keep-alive
            a=1&b=2");
?>

我想将它完全发送到我的服务器,可以吗?

【问题讨论】:

  • PHP header 函数设置 apache 返回给客户端的 response 标头。问题中的标头是客户端发送给 apache 的 request 标头。
  • 好的,在一个命令中只使用地址和引用以及 cookie 和参数呢?
  • 不能设置referer或者让浏览器通过headers提交POST请求。详情请看我的回答。

标签: php apache header


【解决方案1】:

您可以从文本中提取它并使用header() 方法毕竟...有点像这样:

<?php
$txt = "http://example.com/test.php
POST test.php HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://example.com/test/
Content-Length: 87
Cookie: __cfduid=somevalue;
Connection: keep-alive
a=1&b=2";

array_map("header", explode("\n", $txt));

所以本质上,每个新行都会在数组中创建一个条目。 array_map() 遍历数组,对于数组中的每一项,都会调用header() 函数,并将数组中的项作为唯一参数。

【讨论】:

    【解决方案2】:

    PHP 标头函数设置 response 标头,apache 返回给客户端。问题中的标头是客户端发送给 apache 的 request 标头。

    来自HTTP/1.1 specification

    6.2 响应头字段

    响应头字段允许服务器传递额外的 有关无法放置在状态中的响应的信息- 线。这些标头字段提供有关服务器的信息以及关于 进一步访问由 Request-URI 标识的资源。

       response-header = Accept-Ranges           ; Section 14.5
                       | Age                     ; Section 14.6
                       | ETag                    ; Section 14.19
                       | Location                ; Section 14.30
                       | Proxy-Authenticate      ; Section 14.33
                       | Retry-After             ; Section 14.37
                       | Server                  ; Section 14.38
                       | Vary                    ; Section 14.44
                       | WWW-Authenticate        ; Section 14.47
    

    响应头字段名称只能在 与协议版本的更改相结合。然而,新的或 实验标头字段可以被赋予响应的语义- 标头字段,如果通信中的所有各方都认可它们 是响应头字段。无法识别的标头字段被视为 实体头字段。

    其他 RFC extend this list,但您不能设置引用者,或使浏览器通过标头提交另一个 POST 请求。

    【讨论】:

    • 所以在这种情况下,使用 apache 标头我们可以只调用一个 url 而没有任何引用者?如果是,我们怎么称呼它?
    • 我相信你正在陷入XY problem。我建议删除这个问题并问真正的问题 - 你想要实现的目标。
    【解决方案3】:

    您可以使用可选的“替换”参数一一发送多个标头并将其设置为 false。因此,例如,您可以发送

    header("http://example.com/test.php");
    header("POST test.php HTTP/1.1",false);
    

    等等。这将附加到原始标题。

    来源:http://php.net/manual/en/function.header.php

    【讨论】:

    • 我知道,正如我在问题中所说的那样,但它大约有 1000 个文件!我想在一个命令中发送所有内容
    • replace是用来替换你已经使用header()函数设置的header...不是重置不同的header类型...
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2021-08-09
    • 2021-06-24
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多