2016-04-29 9 views
2

を保存現在、別のサーバーにzlibのファイルを投稿するように設定し、サーバーがある:(ここではそのためのC#コードがある)は、着信PHPのポストを検出し、ファイル

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ポストのもの(別名私のサーバーIPへのサーバ192何かまたは他のポストがとき)私ができるようにする必要があり

  • a)のPOSTが
  • B行われていることを検出し)ホワイトリストIPであることを確認してください
  • c)POSTデータ(バイナリである必要があります)をダウンロードし、名前がポストにあるものとして保存します(URLにファイル名を受け入れる必要があります:

    • をA)にこのコードを使用します。www.blah.com/upload?filename=somefile_1234_12389126496129684790.zlib)

    は、しかし、これは私の研究は、これまでに私に言ったものであるPHPに新しいっぽいもの$_SERVER['HTTP_REFERER']

  • :要求がポスト

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

  • B)を使用するかどうかを確認

  • c)実際の考えはありません。

これらの部分をどのように一緒に綴じるかについても完全にはわかりません。そのIPから送信されたPOSTを聞いて、投稿されているファイルをダウンロードする方法はありますか?

も行うことができるように私のPHPページを設定する方法は本当にわからない:

/postlistener?filename=filename.zlib

私はpostlistener部分は私のページであると信じて、何とかそのページにもファイルを取得することになっています? TH =彼は私の理解であり、同社の他の人のためにこのプロジェクトを引き継いだのですが、もちろんそれに付随する文書はありません。どんな助けでも大きな助けになる、ありがとう。

+0

POSTがあるかどうかを検出するには、投稿の名前に応じて投稿内のすべてのデータをダウンロードします。 – Lain

+0

クラップ私はあなたのコメントを返信するのではなく編集しました... – Lain

+0

いいえ、私はそれを削除しました、ごめんなさい。 – GrumpyCrouton

答えて

2

これは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アレイをループしてすべてのものをダウンロードできます。

+0

これを修正するためには、投稿が特定のIPから来た場合にのみ動作します。httpリファラーが正しいかどうかを確認するためにif文を変更しますか? – Lain

+0

@lainは私の編集を見ます。 – GrumpyCrouton

+0

ありがとう、ダウンロードにいくつかの研究を行います。私は最初のものがダウンロードするのを終えた直後に2番目のループを置くと思いますか? – Lain

関連する問題