php模拟form提交_PHP模拟post提交数据方法汇总

发布于 2021-05-04 09:58:21

使用php模拟post传值虽然在日常生活中用到的不是很多,但是在某些场合还是经常用到的。下面脚本之家小编给大家整理了三种php模拟post传值的方法,file_get_contents、curl和socket。

第一种:file_get_contents来模拟post

function file_get_contents_post($url, $post){

    $options = array(
    
    'http'=> array(
    
    'method'=>'POST',
    
    'content'=> http_build_query($post),
    
    ),
    
    );
    
    $result = file_get_contents($url,false, stream_context_create($options));
    
    return $result;

}

$data = file_get_contents_post("http://www.a.com/post/post.php", array('name'=>'caiknife','email'=>'caiknife#gmail.com'));

var_dump($data);



第二种:curl模拟post

function curl_post($url, $post){

    $options = array(
    
    CURLOPT_RETURNTRANSFER =>true,
    
    CURLOPT_HEADER =>false,
    
    CURLOPT_POST =>true,
    
    CURLOPT_POSTFIELDS => $post,
    
    );
    
    $ch = curl_init($url);
    
    curl_setopt_array($ch, $options);
    
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    return $result;

}

$data = curl_post("http://www.a.com/post/post.php", array('name'=>'caiknife','email'=>'caiknife#gmail.com'));

var_dump($data);



第三种:socket来模拟post

function socket_post($url, $post){

    $urls = parse_url($url);
    
    if(!isset($urls['port'])){
    
    $urls['port']=80;

}

$fp = fsockopen($urls['host'], $urls['port'], $errno, $errstr);

if(!$fp){

    echo "$errno, $errstr";
    
    exit();

}

$post = http_build_query($post);

$length = strlen($post);

$header =<<

POST {$urls['path']} HTTP/1.1

Host:{$urls['host']}

Content-Type: application/x-www-form-urlencoded

Content-Length:{$length}

Connection: close

{$post}

HEADER;

fwrite($fp, $header);

$result ='';

while(!feof($fp)){

$result .= fread($fp,512);

}

$result = explode("\r\n\r\n", $result,2);

return $result[1];

}

$data = socket_post("http://www.a.com/post/post.php", array('name'=>'caiknife','email'=>'caiknife#gmail.com'));

var_dump($data);


上面这三种方法最后看到的内容都是一样的,都可以得到post的传值;但是在是用socket的时候,发送header信息时必须要注意header的完整信息,比如content type和content length必须要有,connection: close和post数据之间要空一行,等等;而通过socket取得的内容是包含了header信息的,要处理一下才能获得真正的内容。



关注公众号,了解更多it技术(it问答网

0 条评论

发布
问题