php 发送POST数据而不发送表单

ibps3vxo  于 2022-12-21  发布在  PHP
关注(0)|答案(7)|浏览(272)

我可以发送例如字符串或其他信息到另一个.php文件,而不暴露它[因此不是通过GET,而是通过POST符合我所知道的],而不使用表单?

neekobn8

neekobn81#

如果您不希望用户看到您的数据,请使用PHP会话。
用户仍然可以访问(和操作)post请求中的数据。
在PHP会话上 checkout this tutorial

72qzrwbm

72qzrwbm2#

如果不需要表单,可以使用 AJAX 发送POST请求。
使用jquery $.post方法非常简单:

$.post('/foo.php', { key1: 'value1', key2: 'value2' }, function(result) {
    alert('successfully posted key1=value1&key2=value2 to foo.php');
});
guicsvcw

guicsvcw3#

使用SESSION而不是post发送数据。

session_start();
$_SESSION['foo'] = "bar";

在你收到请求的页面上,如果你确实需要POST数据(一些奇怪的逻辑),你可以在开始的时候这样做:

$_POST['foo'] = $_SESSION['foo'];

POST数据的有效性与POST发送的数据相同。
然后销毁会话(或者如果您需要会话用于其他目的,则取消设置字段)。
销毁会话或取消设置字段是很重要的,因为与POST不同,SESSION将保持有效,直到您明确销毁它或浏览器会话结束。如果您不这样做,您可能会观察到一些奇怪的结果。例如:您使用sesson来过滤一些数据。用户打开过滤器并获得过滤后的数据。过了一会儿,他返回到页面并期望过滤器被重置,但它没有:他仍然看到过滤后的数据。

hk8txs48

hk8txs484#

简单用途:file_get_contents()

// building array of variables
$content = http_build_query(array(
            'username' => 'value',
            'password' => 'value'
            ));
// creating the context change POST to GET if that is relevant 
$context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'content' => $content, )));

$result = file_get_contents('http://www.example.com/page.php', null, $context);
//dumping the reuslt
var_dump($result);

Reference:我对类似问题的回答:

jckbn6z7

jckbn6z75#

看看php文档中的这些函数,你可以使用它们发送post requeust。

fsockopen()
fputs()

或者简单地使用类似Zend_Http_Client的类,该类也是基于套接字连接的。
我也在谷歌上找到了一个neat example ...

polhcujo

polhcujo6#

function redir(data) {
  document.getElementById('redirect').innerHTML = '<form style="display:none;" position="absolute" method="post" action="location.php"><input id="redirbtn" type="submit" name="value" value=' + data + '></form>';
  document.getElementById('redirbtn').click();
}
<button onclick="redir('dataToBeSent');">Next Page</button>
<div id="redirect"></div>

您可以使用这个方法创建一个新的隐藏表单,当点击按钮[Next Page]时,表单的"数据"通过"post"发送到"location.php"。

yruzcnhs

yruzcnhs7#

我强烈建议在这种情况下使用curl,file_get_content()确实可以工作,但不是在任何时候都可以,而且在某些应用程序中使用它可能会很麻烦。
虽然curl有不同的变体,这取决于您想要发送什么以及使用什么方法,但下面是使用curl在没有HTML表单的情况下发布数据的最常用方法。

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://example.com/request_uri');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $post = array(
        'data1' => 'value1',
        'data2' => $value2
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    
    //do what you want with the responce
    var_dump($result)

相关问题