Heim  >  Artikel  >  php教程  >  php中post模拟提交数据实例四种方法

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

WBOY
WBOYOriginal
2016-06-08 17:22:091304Durchsuche

在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;
}
 
?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP初级面试题整理Nächster Artikel:php生成缩略图的例子