通过curl发送时,$_POST数据在htaccess重写时丢失

问题描述 投票:0回答:1

我想通过 RewriteRule 向 api 文件发送 post 请求。这是我的 .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api/(.*).php$ api/request_data.php?url=$1 [L,QSA]

request_data.php 是 /api 中唯一存在的文件。所有其他文件请求都将发送到具有此文件名(不带扩展名)作为 $_GET 参数的文件。

当我使用 HTML 表单进行测试时,效果很好,如下所示:

<form action="/api/get_test_data.php" method="post" target="_blank">
  <input type="hidden" name="test" value="ABCDEF1234567890" />  
  <input type="submit" value="Submit">
</form> 

这将在 request_data.php 中给我:

$_GET = Array
        (
            [url] => sign_in2
        )

$_POST = Array
        (
            [test] => ABCDEF1234567890
        )

但是,当我通过curl执行相同操作时,它只给我request_data.php中的$_GET参数,$_POST为空。

这些是我的卷曲选项:

$curl = curl_init();
curl_setopt_array(
    $curl, 
    array(
      CURLOPT_URL => "/api/get_test_data.php",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 1,
      CURLOPT_TIMEOUT => 3,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_HTTPHEADER => ["test: ABCDEF1234567890"]
    )
);
$response = curl_exec($curl);   

使用curl时重写时$_POST数据是否可能会丢失,但在通常的HTML表单中不会丢失?

php .htaccess curl post mod-rewrite
1个回答
0
投票

我找到了解决问题的方法。

我可以通过getallheaders获取$_POST数据。只需要清理不必要的信息,但我可以忍受。

© www.soinside.com 2019 - 2024. All rights reserved.