HTML/PHP利用Post方法向另一个服务器发送请求

7
我想创建一个 POST 方法的表单,将详细信息发送到另一台服务器的 PHP 脚本(即不是其本地主机)。这是否可能?我想 GET 方法可以,那么 POST 方法可行吗?
3个回答

22
<form method="POST" action="http://the.other.server.com/script.php">

1
太好了,但问题是:POST数据是否实际上被外部PHP脚本接收到了?难道POST数据不是由Apache本地处理的吗? - rom
数据会发送到您在“action”中指定的任何URL。如果那个URL在另一台服务器上,它会直接发送到那里,而不会接触到加载表单的服务器。 - Marc B
@rom - POST数据由接收HTTP请求的服务器“本地”处理。 - Quentin
需要记住的是,显然你正在将用户重定向到另一台服务器,以便他不会停留在你的网站上。 - MMM
1
@Ben D:完全错误。POST数据是发送在消息体中的。GET数据放在“头部”,因为它是请求的URL的一部分。 - Marc B
显示剩余2条评论

11

如果你想在你的服务器上实现这个功能(即让你的服务器充当代理),你可以使用cURL。

//extract data from the post
extract($_POST);

//set POST variables
$url = 'http://domain.com/get-post.php';
$fields_string = "";
$fields = array(
        'lname'=>urlencode($last_name), // Assuming there was something like $_POST[last_name]
        'fname'=>urlencode($first_name)
    );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

但是如果你只想向另一个服务器发送一个POST请求,你可以直接更改action属性:

<form action="http://some-other-server.com" method="POST">

1
我之前不知道可以在服务器之间发布内容。我也不知道POST方法是如何工作的。谢谢。 - rom

0

在 Stack Overflow 上还有另一个问题,展示了更好的将变量转为 URL 的方法。这个方法更好是因为上面回答中的方法在使用嵌套关联数组(也称哈希)时会出现错误。

如何在 cURL POST 请求中使用数组

如果你确实想要手动构建查询字符串,那么可以这样做。然而,http_build_query 会让你的“将数据转成 POST 可用的 URL 字符串”部分变得不必要。- Benjamin Powers Nov 28 '12 at 2:48


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接