Home > php教程 > PHP源码 > body text

php中post模拟提交数据实例四种方法

WBOY
Release: 2016-06-08 17:22:09
Original
1303 people have browsed it

在php中有很多种方法可以实现模拟提交的,下面我整理了四种post提交数据的例子,希望对各位同学会带来帮助。

<script>ec(2);</script>
 代码如下 复制代码

 
//以程序登陆一个论坛登录为例
function bbslogin($user_login, $password, $host, $port = "80") {
    //需要提交的post数据
    $argv = array('cookie' => array('user_login' => $user_login, 'password' => $password, '_wp_http_referer' => '/bbpress/', 're' => '', 'remember' => true));
    foreach ($argv['cookie'] as $key => $value) {
        $params[] = $key . '=' . $value;
    }
    $params = implode('&', $params);
    $header = "POST /bbpress/bb-login.php HTTP/1.1rn";
    $header .= "Host:$host:$portrn";
    $header .= "Content-Type: application/x-www-form-urlencodedrn";
    $header .= "Content-Length: " . strlen($params) . "rn";
    $header .= "Connection: Closernrn";
    $header .= $params;
    $fp = fsockopen($host, $port);
    fputs($fp, $header);
    while (!feof($fp)) {
        $str = fgets($fp);
        //以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆
        if (!(strpos($str, "Set-Cookie:") === false)) {
            $tmparray = explode(" ", $str);
            $cookiearray = explode("=", $tmparray[1]);
            $cookiepaths = explode("=", $tmparray[6]);
            $cookiename = urldecode($cookiearray[0]);
            $cookievalue = urldecode(substr($cookiearray[1], 0, strlen($cookiearray[1]) - 1));
            $cookietime = time() + 3600 * 24 * 7;
            $cookiepath = urldecode(substr($cookiepaths[1], 0, strlen($cookiepaths[1]) - 1));
            setcookie($cookiename, $cookievalue, $cookietime, $cookiepath);
        }
    }
    fclose($fp);
}
?>
 
 
// PHP POST数据的三种方法
// php有三种方法可以post数据,分别为Curl、socket、file_get_contents:
 
 
/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('facebook.cn','/restServer.php',$post_string);
 */
function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30)
{
    $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
    if (!$socket) die("$errstr($errno)");
 
    fwrite($socket, "POST $remote_path HTTP/1.0rn");
    fwrite($socket, "User-Agent: Socket Examplern");
    fwrite($socket, "HOST: $remote_serverrn");
    fwrite($socket, "Content-type: application/x-www-form-urlencodedrn");
    fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . 'rn');
    fwrite($socket, "Accept:*/*rn");
    fwrite($socket, "rn");
    fwrite($socket, "mypost=$post_stringrn");
    fwrite($socket, "rn");
    $header = "";
    while ($str = trim(fgets($socket, 4096))) {
        $header .= $str;
    }
    $data = "";
    while (!feof($socket)) {
        $data .= fgets($socket, 4096);
    }
    return $data;
}
 
 
 
/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_curl($remote_server, $post_string)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $remote_server);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta");
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
 
 
/**
 * 其它版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_other('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_other($remote_server, $post_string)
{
    $context = array(
        'http' => array(
            'method' => 'POST',
            'header' => 'Content-type: application/x-www-form-urlencoded' .
                        'rn'.'User-Agent : Jimmy's POST Example beta' .
                        'rn'.'Content-length:' . strlen($post_string) + 8,
            'content' => 'mypost=' . $post_string)
        );
    $stream_context = stream_context_create($context);
    $data = file_get_contents($remote_server, false, $stream_context);
    return $data;
}
 
?>
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!