2012-10-26 26 views
7

Biraz arka plan: Güvenlik duvarımın arkasında bir apache sunucusuna veri göndermesi gereken bir genel web sitesinde bir formum var. Bu web sunucusuna internet üzerinden doğrudan erişim sağlamak istemiyorum.HTTP form iletisini yeniden yönlendirme

Şu anda yapıyorum şu: DMZ'de bir IIS sunucum var, bu IIS sunucusu, güvenlik duvarından apache sunucusuna erişmesine izin verilen tek IP'dir. Geçici bir çözüm olarak, IIS'yi Apache kutusunu IIS üzerinden internete sunmak için IIS'yi "Uygulama İsteği Yönlendirme" ile kuruyorum.

* Ne yapmak isterim: * Apache kutusunu internete sunmak zorunda kalmadan formu yakalayıp aktarmanın bir yolunu bulun. Buradaki hile, POST'un internetteki herhangi bir yerden geleceği, IIS sunucusu tarafından yakalanacağı ve daha sonra IIS sunucusundan apache kutusuna aktarılacağıdır. PHP/cURL ile bunu içine baktı ama hile olacaktır böyle bir şey kullanmıyor emin eğer duyuyorum ettik:

<?php 

$todo = ""; 

while (list($name, $value) = each($HTTP_POST_VARS)) { 
$todo.=$name."=".$value."&"; 
} 

$ch = curl_init('http://mylanserver/capture.php'); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $todo); 
curl_exec ($ch); 
curl_close ($ch); 
?> 

birisi bana doğru yönde işaret edebilir? Teşekkürler.

+3

Doğru yoldasınız. Bunu böyle yapardım: 1. Ham isteği al 2. IIS sunucusuna ilet. Şu soruları deneyin: http://stackoverflow.com/questions/1361673/get-raw-post-data http://stackoverflow.com/questions/869927/php-difference-between-curl-and-httprequest – Brian

+1

Evet doğru fikre sahip olmak. 'CURLOPT_POSTFIELDS' doğrudan' $ _POST' dizisini alabilir, anahtar değer dizesini oluşturmanıza gerek yoktur. Ayrıca muhtemelen sonucu kontrol etmek ve sonuçların kamuya açık bir şekilde yorumlanmasını mı istiyorsunuz? 'curl_exec()', "CURLOPT_RETURNTRANSFER" öğesini ayarladıysanız yanıtı döndürür. – MrCode

+0

Tamam, yukarıdaki kod, çoğunlukla, doğru şekilde çalışıyor. Formumda "ad, telefon, e-posta, posta kodu" gibi düzgün bir şekilde geçirilen alanlar var. Temelde birden çok değeri olmayan bir şey. Parasal değerlere sahip bazı ek alanlarim var. Bunlar geçtikten sonra arka plan programım "Array" ile alanları doldurur, bu alanların her biri için bir dizi tanımlamam gerekir mi? Burada ne yapacağından emin değilim, uzmanlığım Kes ve Yapıştır. – jqapi

cevap

0

Eğer sizi doğru anlıyorsam, gönderiyi göndermek istiyor musun?

Eğer $ veri array kendini inşa etmek yok
$url = 'http://server.com/path'; 
$data = array('key1' => 'value1', 'key2' => 'value2') 

// use key 'http' even if you send the request to https://... 
$options = array('http' => array(
    'method' => 'POST', 
    'content' => http_build_query($data) 
)); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

, sadece $ _POST dizi geçirebilirsiniz:

bu deneyin.

3

Eklediğim ilk ifade düzgün çalıştı, ancak formumda birden fazla seçim seçeneği olan değerleri geçmiyordu. Sadece "Array" alanlarını doldurmaktaydı. ,

$postParams = file_get_contents("php://input"); 


$ch = curl_init('http://mysite/capture.php'); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postParams); 
curl_exec ($ch); 
curl_close ($ch); 

Sonra bir "Teşekkür" sayfasına yönlendirileceksiniz müşteri, benim arka uç programı, bu verileri gönderdiğini gerekli ama cURL onunla çalışması için alamadım: Bunu yaparak bu düzeltilmiş Bunu üstbilgi yenileme ve 1 değeri ayarlayarak çalıştı. Bu gibi:

header("refresh:1;url=http://mythankyoupage"); 

Yardımın için teşekkürler!

0

Snoopy kullanın. Size çok yardımcı olacaktır. Veya verileri geçici bir DB'ye kaydedin, küçük bir bot oluşturun (tekrar snoopy kullanabilirsin) ve bunun web sunucusu ile iletişim kurmasına izin verin ve veriyi istediğiniz gibi oynayın. Bu botu cron sekmesinde cron olarak planlayın.