如何在php脚本中向不同的php页面发送帖子请求?我有一台前端计算机作为html页面服务器,但当用户单击一个按钮时,我希望后端服务器进行处理,然后将信息发送回前端服务器以显示用户。我说我可以在后端计算机上有一个php页面,它会将信息发送回前端。再一次,如何从php页面向另一个php页面发出POST请求?
答案 0 :(得分:45)
使PHP执行POST请求的最简单方法是使用cURL,作为extension或简单地炮轰到另一个进程。这是一个帖子样本:
// where are we posting to?
$url = 'http://foo.com/script.php';
// what post fields?
$fields = array(
'field1' => $field1,
'field2' => $field2,
);
// build the urlencoded data
$postvars = http_build_query($fields);
// 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, $postvars);
// execute post
$result = curl_exec($ch);
// close connection
curl_close($ch);
还要查看Zend框架中的Zend_Http个类集,它提供了一个非常强大的HTTP客户端,直接用PHP编写(无需扩展)。
2014年编辑 - 好吧,自从我写这篇文章以来已经有一段时间了。这些天值得检查Guzzle,无论是否有卷曲延伸,它都可以使用。
答案 1 :(得分:6)
假设您的php安装具有CURL扩展名,它可能是最简单的方法(如果您愿意,最完整的方式)。
示例代码段:
//set POST variables
$url = 'http://domain.com/get-post.php';
$fields = array(
'lname'=>urlencode($last_name),
'fname'=>urlencode($first_name),
'email'=>urlencode($email)
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
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);
积分转到http://php.dzone.com。 另外,不要忘记访问PHP手册中的相应page(s)
答案 2 :(得分:3)
对于PHP处理,请查看cURL。它允许您调用后端的页面并从中检索数据。基本上你会做这样的事情:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL,$fetch_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch,CURLOPT_USERAGENT, $user_agent;
curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,60);
$response = curl_exec ( $ch );
curl_close($ch);
您还可以查看PHP HTTP Extension。
答案 3 :(得分:2)
与其他用户一样,使用CURL最容易做到这一点。
如果没有卷曲,那么也许 http://netevil.org/blog/2006/nov/http-post-from-php-without-curl
如果不可能,您可以自己编写套接字 http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
答案 4 :(得分:1)
index.php
$url = 'http://[host]/test.php';
$json = json_encode(['name' => 'Jhonn', 'phone' => '128000000000']);
$options = ['http' => [
'method' => 'POST',
'header' => 'Content-type:application/json',
'content' => $json
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
test.php
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
echo $data['name']; // Jhonn
答案 5 :(得分:0)
对于那些使用cURL的人,请注意CURLOPT_POST选项被视为布尔值,因此实际上不需要将其设置为您要发布的字段数。
将CURLOPT_POST设置为TRUE(即除零之外的任何整数)将告诉cURL将数据编码为application / x-www-form-urlencoded,尽管我打赌当你将urlencoded字符串作为CURLOPT_POSTFIELDS传递时,这并不是绝对必要的,因为cURL应该已经通过后一个选项设置的值的类型(字符串与数组)来告诉编码。
另请注意,从PHP 5开始,您可以使用http_build_query函数为您的PHP urlencode创建fields数组,如下所示:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
答案 6 :(得分:0)
解决方案在target =" _blank"像这样:
http://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html
编辑这样的表格:
<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">
并使用此脚本:
<script type="text/javascript">
<!--
function doubleSubmit(f)
{
// submit to action in form
f.submit();
// set second action and submit
f.target="_blank";
f.action="../booking/vytvor.php";
f.submit();
return false;
}
//-->
</script>
答案 7 :(得分:0)
虽然不理想,但如果cURL选项不能满足您的要求,则可以尝试使用shell_exec();
答案 8 :(得分:-6)
CURL方法很受欢迎,所以使用它是好的。您还可以通过一些额外的评论来解释这些代码,因为初学者可以理解它们。