php模拟get和post的几种方法

php模拟get和post的几种方法,第1张

 方法一:

[php] view plaincopy

$re = file_get_contents($url)  

print_r($re)  

 

方法二:

[php] view plaincopy

$ch = curl_init("http://www.jb51.net/")    

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)    

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true)    

$output = curl_exec($ch)    

$fh = fopen("out.html", 'w')    

fwrite($fh, $output)    

fclose($fh)   

方法三:

其中把post一块包含进来了

[php] view plaincopy

function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE   , $ip = '', $timeout = 15, $block = TRUE, $encodetype  = 'URLENCODE') {  

    $return = ''  

    $matches = parse_url($url)  

    $host = $matches['host']  

    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'  

    $port = !empty($matches['port']) ? $matches['port'] : 80  

  

    if($post) {  

        $out = "POST $path HTTP/1.0\r\n"  

        $out .= "Accept: */*\r\n"  

        $out .= "Accept-Language: zh-cn\r\n"  

        $boundary = $encodetype == 'URLENCODE' ? '' : ''.substr($post, 0, trim(strpos($post, "\n")))  

        $out .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data$boundary\r\n"  

        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"                              

        $out .= "Host: $host\r\n"  

        $out .= 'Content-Length: '.strlen($post)."\r\n"  

        $out .= "Connection: Close\r\n"  

        $out .= "Cache-Control: no-cache\r\n"  

        $out .= "Cookie: $cookie\r\n\r\n"  

        $out .= $post  

    } else {  

        $out = "GET $path HTTP/1.0\r\n"  

        $out .= "Accept: */*\r\n"  

        $out .= "Accept-Language: zh-cn\r\n"  

        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"  

        $out .= "Host: $host\r\n"  

        $out .= "Connection: Close\r\n"  

        $out .= "Cookie: $cookie\r\n\r\n"  

    }  

    $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)  

    if(!$fp) {  

        return ''  

    } else {  

        stream_set_blocking($fp, $block)  

        stream_set_timeout($fp, $timeout)  

        @fwrite($fp, $out)  

        $status = stream_get_meta_data($fp)  

        if(!$status['timed_out']) {  

            while (!feof($fp)) {  

                if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")){  

                    break  

                }  

            }  

            $stop = false  

            while(!feof($fp) && !$stop) {  

                $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit))  

                $return .= $data  

                if($limit) {  

                    $limit -= strlen($data)  

                    $stop = $limit <= 0  

                }  

            }  

        }  

        @fclose($fp)  

        return $return  

    }  

}

不用hidden的话

<form name="login" method="post" action="Untitled-1.php">

改成

<form name="login" method="post" action="Untitled-1.php?action=login">也可以。

因为你后面没有action一个地址当然要用一个隐藏字段给一个地址啊,要不然它怎么知道哪个是你点击之前执行的哪个是点击之后执行的。

第二段代码直接显示是因为你后面一段代码对应的地址就是Untitled-3.php,你如果在Untitled-3.php后面加个?action=aa的话,那你在PHP里就要写if($_POST[‘action’]=="aa"){ }大括号的内容就是Untitled-3.php?action=aa这个地址所执行的代码。

就是说

<form name="login" method="post" action="Untitled-1.php?action=login">

这样写的话在PHP里要用GET才能判断到,如:if($_GET[‘action’]=="login"){当action=login时执行的代码}

你用hidden隐藏字段写意思是一样的,只不过它也是表单里的一个input筐,所以要用表单指定的传输来POST 或GET。

说白了就是给PHP一个地址,让它知道哪些代码是按按钮之前的,哪些是按按钮之后的

我也刚学1个月,有不对的地方多多指点

你现在的代码什么样的,应该发出来看一下。

我就给你说几个关键的点吧

表单页,链接的你应该写对了,在get里加参数,post的,需要在form上加action,checkbox需要加name和value属性

<form action="lab06-post.php" method="post">

    <label><input type="checkbox" name="ids[]" value="1"/> 项目1</label><br />

    <label><input type="checkbox" name="ids[]" value="2"/> 项目2</label><br />

    <label><input type="checkbox" name="ids[]" value="3"/> 项目3</label><br />

    <label><input type="checkbox" name="ids[]" value="4"/> 项目4</label><br />

    <label><input type="checkbox" name="ids[]" value="5"/> 项目5</label>

    

    ...

    

    <input type="submit" value="提交"/>

</form>

name用带方括号( [] )的,在服务器端接收的时候会接收到一个数组

$ids = $_POST['ids']

if(empty($ids)){

    echo "没有选择项目"

}else{

    echo "选择了项目".implode(",",$ids)

}

以上仅为参考,你可以根据自己的需求情况调整,如果做数据库查询,最好做一下必要的过滤


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7333514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存