Home >Backend Development >PHP Tutorial >Two methods to simulate POST submission data in PHP_PHP tutorial

Two methods to simulate POST submission data in PHP_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:11:171047browse

The following summarizes two implementation methods in PHP that can imitate users to enter login or post data. They are very useful to everyone. Friends in need can refer to them.

Through the curl function
CURL function library (Client URL Library Function) in PHP

curl_close — close a curl session
curl_copy_handle — copy all contents and parameters of a curl connection resource
curl_errno — Returns a numeric number containing error information of the current session
curl_error — Returns a string containing error information of the current session
curl_exec — Execute a curl session
curl_getinfo — Get information about a curl connection resource handle
curl_init — Initialize a curl session
curl_multi_add_handle — Add a separate curl handle resource to a curl batch session
curl_multi_close — Close a batch handle resource
curl_multi_exec — Parse a curl batch handle
curl_multi_getcontent — Returns the text stream of the obtained output
curl_multi_info_read — Gets the relevant transmission information of the currently parsed curl
curl_multi_init — Initializes a curl batch handle resource
curl_multi_remove_handle — Removes the curl batch handle resource A certain handle resource
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — Set session parameters for a curl in the form of an array
curl_setopt — Set for a curl Session parameter
curl_version — Get curl-related version information

The role of the curl_init() function is to initialize a curl session. The only parameter of the curl_init() function is optional and represents a URL address.
The curl_exec() function is used to execute a curl session. The only parameter is the handle returned by the curl_init() function.
The curl_close() function is used to close a curl session. The only parameter is the handle returned by the curl_init() function.

Example

The code is as follows
Copy code
 代码如下 复制代码

$post_data = array();
$post_data['clientname'] = "test08";
$post_data['clientpasswd'] = "test08";
$post_data['submit'] = "submit";
$url='http://xxx.xxx.xxx.xx/xx/xxx/top.php';
$o="";
foreach ($post_data as $k=>$v)
{
    $o.= "$k=".urlencode($v)."&";
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
//为了支持cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$result = curl_exec($ch);

$post_data = array();$post_data['clientname'] = "test08";$post_data['clientpasswd'] = "test08";$post_data['submit'] = "submit";$url='http://xxx.xxx.xxx.xx/xx/xxx/top.php'; $o="";foreach ($post_data as $k=>$v){ $o.= "$k=".urlencode($v)."&";}$post_data=substr($o,0,-1);$ch = curl_init();curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch , CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_URL,$url);//In order to support cookiescurl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);$result = curl_exec($ch);

模仿用户登录
模拟登录到sina

我们要抓取数据,可能是登录以后的内容,这个时候我们就要用到curl的模拟登录功能了。

 

 代码如下 复制代码

<?php

function checklogin( $user, $password )
 {
 if ( empty( $user ) || empty( $password ) )
 {
 return 0;
 }
 $ch = curl_init( );
 curl_setopt( $ch, CURLOPT_REFERER, "http://mail.sina.com.cn/index.html" );
 curl_setopt( $ch, CURLOPT_HEADER, true );
 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
 curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
 curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
 curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
 curl_setopt( $ch, CURLOPT_URL, "http://mail.sina.com.cn/cgi-bin/login.cgi" );
 curl_setopt( $ch, CURLOPT_POST, true );
 curl_setopt( $ch, CURLOPT_POSTFIELDS, "&logintype=uid&u=".urlencode( $user )."&psw=".$password );
 $contents = curl_exec( $ch );
 curl_close( $ch );
 if ( !preg_match( "/Location: (.*)/cgi/index.php?check_time=(.*)n/", $contents, $matches ) )
 {
 return 0;
 }else{
 return 1;
 }
 }

define( "USERAGENT", $_SERVER['HTTP_USER_AGENT'] );
 define( "COOKIEJAR", tempnam( "/tmp", "cookie" ) );
 define( "TIMEOUT", 500 );

echo checklogin("zhangying215","xtaj227");
 ?>

2.通过fsockopen


.PHP fsockopen函数说明:

Open Internet or Unix domain socket connection(打开套接字链接)

Initiates a socket connection to the resource specified by target .

fsockopen() returns a file pointer which may be used together with the other file functions (such as fgets() , fgetss() , fwrite() , fclose() , and feof() ).就是返回一个文件句柄

开启PHP fsockopen这个函数

PHP fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启。

 代码如下 复制代码


$URL=‘http://xxx.xxx.xxx.xx/xx/xxx/top.php';
$post_data['clientname'] = "test08";
$post_data['clientpasswd'] = "test08";
$post_data['submit'] = "ログイン";
$referrer="";
// parsing the given URL
$URL_Info=parse_url($URL);
// Building referrer
if($referrer=="") // if not given use this script as referrer
$referrer=$_SERVER["SCRIPT_URI"];
 
// making string from $data
foreach($post_data as $key=>$value)
$values[]="$key=".urlencode($value);
 
$data_string=implode("&",$values);
// Find out which port is needed - if not given use standard (=80)
if(!isset($URL_Info["port"]))
$URL_Info["port"]=80;
// building POST-request:
$request.="POST ".$URL_Info["path"]." HTTP/1.1n";
$request.="Host: ".$URL_Info["host"]."n";
$request.="Referer: $referrern";
$request.="Content-type: application/x-www-form-urlencodedn";
$request.="Content-length: ".strlen($data_string)."n";
$request.="Connection: closen";
$request.="n";
$request.=$data_string."n";
$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
fputs($fp, $request);
while(!feof($fp)) {
    $result .= fgets($fp, 128);
}
fclose($fp);

If

Warning: fsockopen() has been disabled for security reasons in D:…cos-html-cachecos-html-cache.php on line 35
Changed to another version of cos- html-cache, still doesn't work. Later I found the following method. (The result does not work, because the functions are disabled.)
Everyone, try it, there are few situations like mine, use other alternative functions.
1. How to disable fsockopen()
The following are two commonly used methods to disable fsockopen.
1. Modify php.ini and add fsockopen after disable_functions =
2. Modify php.ini and change allow_url_fopen = On to allow_url_fopen = Off
2. How to solve the problem that fsockopen function is disabled
1 . If the server does not disable pfsockopen at the same time, directly replace the fsockopen function with pfsockopen.
Specific operation: Search for the string fsockopen( in the program and replace it with pfsockopen(. The example is as follows
Before modification:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
After modification:
$fp = pfsockopen($host, 80, $errno, $errstr, 30);


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/444664.htmlTechArticleThe following summarizes two implementation methods in php that can imitate users to enter login or post data. It is very helpful to everyone. It’s useful, friends in need can refer to it. Through the curl function in PHP...
Statement:
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