2012-10-26 34 views
7

Một nền nhỏ: Tôi có biểu mẫu trên trang web công khai cần đăng dữ liệu lên máy chủ apache phía sau tường lửa của tôi. Tôi không muốn cung cấp quyền truy cập trực tiếp vào webhost này từ internet.Đang chuyển hướng bài đăng biểu mẫu HTTP

Hiện tại đây là những gì tôi đang làm: Tôi có máy chủ IIS trong DMZ, máy chủ IIS này là IP duy nhất được phép truy cập máy chủ apache qua tường lửa. Là một giải pháp tạm thời, tôi thiết lập IIS với "Application Request Routing" để trình bày hộp Apache thông qua IIS tới internet.

* Tôi muốn làm gì: * Có cách nào đó để chụp và sau đó chuyển tiếp biểu mẫu mà không cần phải trình bày hộp Apache lên internet. Bí quyết ở đây là POST sẽ đến từ bất cứ đâu trên internet, được máy chủ IIS nắm lấy, và sau đó chuyển tiếp từ máy chủ IIS đến hộp apache. Tôi đã nhìn vào thực hiện điều này với PHP/cURL nhưng không chắc chắn nếu sử dụng một cái gì đó như thế này sẽ làm các trick:

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

Ai đó có thể chỉ cho tôi đi đúng hướng? Cảm ơn.

+3

Bạn đang đi đúng hướng. Tôi sẽ làm như thế này: 1. Nhận yêu cầu thô 2. Chuyển tiếp nó vào máy chủ IIS. Hãy thử các câu hỏi sau: http://stackoverflow.com/questions/1361673/get-raw-post-data http://stackoverflow.com/questions/869927/php-difference-between-curl-and-httprequest – Brian

+1

Có bạn có ý tưởng đúng. 'CURLOPT_POSTFIELDS' có thể đơn giản lấy mảng' $ _POST' trực tiếp, bạn không cần phải xây dựng chuỗi giá trị khóa. Ngoài ra bạn có thể muốn kiểm tra kết quả và sau đó hiển thị một số giải thích kết quả cho người dùng công cộng? 'curl_exec()' trả về phản hồi nếu bạn đặt 'CURLOPT_RETURNTRANSFER'. – MrCode

+0

Ok, mã trên hoạt động bình thường, hầu hết các phần. Tôi có các trường trong biểu mẫu của tôi như "tên, điện thoại, email, mã zip" các trường đang được truyền chính xác. Về cơ bản, mọi thứ không có nhiều giá trị. Tôi có một số lĩnh vực bổ sung với các giá trị tiền tệ vv Khi những người được thông qua chương trình phụ trợ của tôi populates các lĩnh vực với "Array" tôi cần phải xác định một mảng cho mỗi lĩnh vực này? Không chắc chắn phải làm gì ở đây, đặc sản của tôi là Cắt & Dán. – jqapi

Trả lời

0

nếu im hiểu chính xác bạn, bạn muốn gửi dữ liệu bài đăng?

thử điều này:

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

bạn không cần phải xây dựng các mảng $ dữ liệu cho mình, bạn chỉ có thể vượt qua trên mảng $ _POST.

3

Câu lệnh đầu tiên tôi đã đưa vào hoạt động đúng cách nhưng không chuyển các giá trị có nhiều tùy chọn chọn vào biểu mẫu của tôi. Nó chỉ là "Array" trong các lĩnh vực. Tôi sửa lại rằng bằng cách làm này:

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

Sau đó, tôi cần khách hàng để được chuyển hướng đến một trang "cảm ơn", chương trình phụ trợ của tôi đã gửi dữ liệu này, nhưng tôi không thể có được cURL để hoạt động với nó, Tôi đã giải quyết vấn đề này bằng cách làm mới tiêu đề và đặt giá trị thành 1. Giống như vậy:

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

Cảm ơn sự trợ giúp!

0

Sử dụng snoopy. Nó sẽ giúp bạn rất nhiều . Hoặc lưu dữ liệu trong một số DB tạm thời, tạo ra một bot nhỏ (u có thể sử dụng snoopy một lần nữa) và cho phép điều này để giao tiếp với máy chủ web và chơi với dữ liệu như u thích. Lịch trình bot này như cron trong tab cron.

Các vấn đề liên quan