XMLHttpRequest Send 转换为 PHP file_get_contents

XMLHttpRequest Send converted to PHP file_get_contents

所以我试图将 XHR 中的发送数据放入 PHP 的 file_get_contents 中的 header。

因为我在发送post请求时需要确切的Refererheader,所以我需要这样做PHPfile_get_contents stream_context_create 风格。

我基本上需要这个:

xhr.open('POST', 'https://example.com/test');
xhr.setRequestHeader('Referer','https://example.com');
xhr.send('{thing1: "abc", thing2: "def", thing3: "ghi"}');

变成了PHP,像这样:

$url = "https://example.com/test";

$content = '{thing1: "abc", thing2: "def", thing3: "ghi"}';

$opts = ["http" => ["method" => "POST","header" => 
"Content-Type: application/json; charset=UTF-8\r\n".
"Referer: https://example.com\r\n".
"X-Requested-With: XMLHttpRequest\r\n"]];;

echo file_get_contents($url, true, stream_context_create($opts));

我知道 X-Requested-With: XMLHttpRequest 部分是正确的,但我不知道我可以在 $opts 变量中输入的具体 header 值是什么替换 xhr.send() function/just 发送 JSON 数据。

我认为 xhr 不允许您设置 Referer header 它是自动设置的。
在服务器端你应该可以,见下文。

$url = "https://example.com/test";

$content = json_encode([thing1 => "abc", thing2 => "def", thing3 => "ghi"]);

$opts = [
  "http" => [
    "method" => "POST", 
    "header" => [
      "Content-Type: application/json; charset=UTF-8",
      "Referer: https://example.com",
      "X-Requested-With: XMLHttpRequest"
    ],
    "content" => $content
  ]
]

echo file_get_contents($url, true, stream_context_create($opts));