2012-10-26 29 views
7

एक छोटी पृष्ठभूमि: मेरे पास एक सार्वजनिक वेबसाइट पर एक फॉर्म है जिसे मेरे फ़ायरवॉल के पीछे एक अपाचे सर्वर पर डेटा पोस्ट करने की आवश्यकता है। मैं इंटरनेट से इस वेबहोस्ट तक सीधे पहुंच प्रदान नहीं करना चाहता हूं।HTTP फॉर्म पोस्ट को रीडायरेक्ट करना

वर्तमान में यह मैं कर रहा हूं: मेरे पास मेरे डीएमजेड में आईआईएस सर्वर है, यह आईआईएस सर्वर एकमात्र आईपी है जो फ़ायरवॉल के माध्यम से अपाचे सर्वर तक पहुंचने की अनुमति देता है। अस्थायी समाधान के रूप में मैंने इंटरनेट पर आईआईएस के माध्यम से अपाचे बॉक्स पेश करने के लिए "एप्लिकेशन अनुरोध रूटिंग" के साथ आईआईएस सेटअप किया।

* मैं क्या करना चाहता हूं: * कैप्चर करने के लिए कुछ तरीका है और फिर इंटरनेट पर अपाचे बॉक्स पेश किए बिना फॉर्म को रिले करें। यहां चाल यह है कि पोस्ट इंटरनेट पर कहीं से भी आएगा, आईआईएस सर्वर द्वारा पकड़ा जाएगा, और उसके बाद आईआईएस सर्वर से अपाचे बॉक्स में रिले किया जाएगा। मैं PHP/cURL के साथ ऐसा करने में देखा लेकिन यकीन नहीं अगर कुछ इस तरह का उपयोग कर चाल क्या करेंगे हूं:

<?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); 
?> 

कोई सही दिशा में मुझे बात कर सकते हैं? धन्यवाद।

+3

आप सही रास्ते पर हैं। मैं इसे इस तरह से करूँगा: 1. कच्चे अनुरोध प्राप्त करें 2. इसे आईआईएस सर्वर पर अग्रेषित करें। इन सवालों का प्रयास करें: http://stackoverflow.com/questions/1361673/get-raw-post-data http://stackoverflow.com/questions/869927/php-difference-between-curl-and-httprequest – Brian

+1

हां आप सही विचार है। 'CURLOPT_POSTFIELDS' सीधे' $ _POST' सरणी ले सकता है, आपको कुंजी मान स्ट्रिंग बनाने की आवश्यकता नहीं है। इसके अलावा आप शायद परिणाम जांचना चाहते हैं और फिर सार्वजनिक उपयोगकर्ता को परिणाम की कुछ व्याख्या प्रदर्शित करना चाहते हैं? यदि आप 'CURLOPT_RETURNTRANSFER' सेट करते हैं तो' curl_exec() 'प्रतिक्रिया देता है। – MrCode

+0

ठीक है, उपरोक्त कोड अधिकांश भाग के लिए ठीक से काम करता है। मेरे पास मेरे फॉर्म में फ़ील्ड हैं जैसे "नाम, फोन, ईमेल, ज़िप" जिन्हें ठीक से पारित किया जा रहा है। मूल रूप से कई मूल्यों के बिना कुछ भी। मेरे पास मौद्रिक मूल्यों के साथ कुछ अतिरिक्त फ़ील्ड हैं। जब वे पास किए जाते हैं तो मेरा बैकएंड प्रोग्राम "ऐरे" वाले फ़ील्ड को पॉप्युलेट करता है, क्या मुझे इन क्षेत्रों में से प्रत्येक के लिए एक सरणी परिभाषित करने की आवश्यकता है? निश्चित नहीं है कि यहां क्या करना है, मेरी विशेषता कट और पेस्ट है। – jqapi

उत्तर

0

यदि मैं आपको सही ढंग से समझता हूं, तो आप पोस्ट डेटा भेजना चाहते हैं?

$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); 

आप न $ डेटा सरणी खुद का निर्माण करने के लिए है, तो आप सिर्फ $ _POST सरणी पर पारित कर सकते हैं:

इस प्रयास करें।

3

मैंने जो पहला कथन शामिल किया वह ठीक से काम करता था लेकिन मेरे फॉर्म पर कई विकल्प चुनने वाले मानों को पार नहीं कर रहा था। यह सिर्फ खेतों में "ऐरे" populating था। मैं ठीक किया है कि ऐसा करने से:

$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); 

तो मैं ग्राहक एक "धन्यवाद" पृष्ठ पर पुनः निर्देशित किया जाना है, मेरे बैकएंड कार्यक्रम इस डेटा भेज रहा था, की जरूरत है, लेकिन मैं cURL इसके साथ कार्य करने के लिए नहीं मिल सका, मदद के लिए

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

धन्यवाद: मैं एक हैडर ताज़ा कर रहे हैं और 1. करने के लिए मान सेट तो जैसा द्वारा इस के आसपास काम किया!

0

स्नूपी का उपयोग करें। यह आपको बहुत मदद करेगा। या डेटा को कुछ अस्थायी डीबी में सेव करें, एक छोटा बॉट बनाएं (आप फिर से स्नूपी का उपयोग कर सकते हैं) और इसे वेब सर्वर के साथ संवाद करने और अपनी पसंद के डेटा के साथ खेलने की अनुमति दें। क्रॉन टैब में क्रॉन के रूप में इस बॉट को शेड्यूल करें।