【问题标题】:Detect incoming PHP post, save file检测传入的 PHP 帖子,保存文件
【发布时间】:2016-08-24 18:18:02
【问题描述】:

目前有一个服务器设置为将 zlib 文件发布到另一台服务器:(这是 C# 代码)

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://server-ip-here/postlistener?filename=filename.zlib");
req.UseNagleAlgorithm = true;
req.AllowWriteStreamBuffering = true;
req.Method = "POST";
req.Accept = "application/xml";
req.ServicePoint.Expect100Continue = false;
System.Net.ServicePointManager.CheckCertificateRevocationList = false;
req.Proxy = new WebProxy();

filename = "filename.dat";
byte[] postData = File.ReadAllBytes(filename);
Stream stream = req.GetRequestStream();
stream.Write(postData, 0, postData.Length);
stream.Flush();
stream.Close();

req.BeginGetResponse(new AsyncCallback(responseHandler), this);

需要在不同的服务器上编写一些 php,以便当这个特定 IP 向我发布内容时(也就是当服务器 192.某事或其他帖子向我的服务器 IP 发布时)我需要能够

  • a) 检测到正在创建 POST
  • b) 检查它是否通过列入白名单的 IP
  • c) 下载 POST 数据(应该是二进制的)并将其保存为帖子中的任何名称(需要接受 URL 中的文件名:. www.blah.com/upload?filename=somefile_1234_12389126496129684790.zlib)

然而,对于 PHP 来说,这是我迄今为止的研究告诉我的:

  • a) 使用此代码查看请求是否为帖子

    if '($_SERVER['REQUEST_METHOD'] === 'POST') { // … }

  • b) 使用:$_SERVER['HTTP_REFERER']

  • c) 没有真正的想法。

也不完全确定如何将这些部分串在一起。有什么想法可以监听从该 IP 发送的 POST,然后下载正在发布的文件吗?

也真的不知道如何设置我的 php 页面能够做到:

/postlistener?filename=filename.zlib

我相信 postlistener 部分是我的页面,并且该页面也应该以某种方式获取文件? TH=他是我的理解,已经为公司的其他人接手了这个项目,当然也没有任何文件可以配合。任何帮助都会有很大帮助,谢谢。

【问题讨论】:

  • 检测是否有POST,然后根据帖子名称下载帖子中的所有数据。
  • 废话我编辑了你的评论而不是回复...
  • 不,我删除了,对不起。

标签: c# php post file-transfer


【解决方案1】:

这将监听任何 POST 数据,然后将 post 变量名放入一个数组中。

    <?

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     if($_SERVER['REMOTE_ADDR'] == '*IPADDRESS*') {
          $posts = array();
          foreach ($_POST as $key => $value){
               echo "{$key} = {$value}\r\n";
               array_push($posts,$key);
          }
      }
}

print_r($posts);
?>

之后,您可以遍历$posts 数组并下载所有内容。

【讨论】:

  • 用于修改它,因此它仅在帖子来自特定 IP 时才有效,我只需修改 if 语句以检查 http 引用者是否正确?
  • 好的,谢谢,会去研究下载。我想我会在第一个循环完成下载后立即放第二个循环?
  • 是的,我会在第一个循环之后放置第二个循环。确保它位于 $_SERVER 变量的 { } 内。
  • 另外,如果没有下载部分,就无法测试这是否有效?我使用 fiddler 来模拟发送的 POST,但显然页面不会使用 print_r($posts); 自动重新加载;由于此页面永远不会被实际查看,所有这些都由一台服务器自动完成到另一台服务器。
  • 您可以尝试让 php 在获取帖子时创建一个文件,并用 POST 数据填充该文件?我不确定你有多少访问权限等。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 2017-04-24
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2020-01-17
相关资源
最近更新 更多