• perl post json数据




    use LWP::UserAgent;
    use URI::Escape;
    use Net::Ping;
    use JSON qw(encode_json);
    use Socket;
    use Net::SMTP;
    use LWP;
    use LWP::Simple;
    use LWP::UserAgent;
    use HTTP::Cookies;
    use HTTP::Headers;
    use HTTP::Response;
    use Encode;
    use URI::Escape;
    use URI::URL;
    use File::Temp qw/tempfile/;
    use AE;
    my $now          = time();
    my $ua = LWP::UserAgent->new;
    $ua->timeout(5);
    $ua->env_proxy;
    $ua->agent("Mozilla/8.0");
    my $cookie_jar = HTTP::Cookies->new(
    
        file           => 'lwp_cookies.txt',
        autosave       => 1,
        ignore_discard => 1
    );
    $ua->cookie_jar($cookie_jar);
    ###获取uuid,用于生成2维码
    my $host =
    "https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=$now";
    my $response = $ua->get($host);
    $ua->default_headers;
    
    if ( $response->is_success ) {
        $r = $response->decoded_content;
    	print $r;
        print "
    ";
        }
    else {
        die $response->status_line;  
       };
       
     my $uuid = $1  if ( $r =~ /window.QRLogin.code = 200; window.QRLogin.uuid = "(.*?)"/g ) ;
     print "$uuid is $uuid
    ";
     
     ###根据uuid,生成验证码
    my $api      = "https://login.weixin.qq.com/qrcode/$uuid";
    my $response = $ua->get($api);
    $ua->default_headers;
    if ( $response->is_success ) {
        $r = $response->decoded_content;    # 验证码内容
        print "
    ";
    }
    else {
        die $response->status_line;
    };
    my ( $fh, $filename ) =
      tempfile( "weixin_qrcode_XXXX", SUFFIX => ".jpg", DIR => '/tmp' );
      binmode $fh;
      print $fh $r;
      close $fh;
      print "登录二维码已经下载到本地 [ $filename ] 
    ";
    
    #https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=waJHHDI-og==&tip=1&r=-1969830274&_=1479438579726
    # window.code=201;window.userAvatar = 'data:img/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABQODxIPDRQSEBIXFRQYHjIhHhwcHj0sLiQySUBMS0dARkVQWnNiUFVtVkVGZIhlbXd7gYKBTmCNl4x9lnN
    # +gXz/2wBDARUXFx4aHjshITt8U0ZTfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHz/wAARCACEAIQDASIAAhEBAxEB
    # /8QAGgAAAgMBAQAAAAAAAAAAAAAAAAIBAwQFBv/EADMQAAICAQMCBQIEBQUBAAAAAAABAhEDBBIhMUEFIlFhcRORFDJCgVJiocHRFSMkQ7Hx
    # /8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/xAAeEQEBAQEBAAIDAQAAAAAAAAAAARECMQMSEyFBUf/aAAwDAQACEQMRAD8A8kutslK7pcHSXhuNK5Sbr3LI6HBG
    # +vT1ZByLaVBa4OwtPp48uEfsSoYYpVjjfwQxx17cluPBLK6SkvejsQUX+XH/AEHcckIbvppJLmwY48sf0Pzvl8dCI5JRVRfHp2LtTeeVkQxKLScbDWM
    # +TdLlxr3SL4QepxqSdNcND5JOS5/L6Fnhk1DWKDXlycfuEU/hskbprn3FemyRp7l145PTfh4fwoPw2N1cVwXGXno6fJkik5Rq2+eptxSljxKEE5U
    # /Q66wQ9EMsUa6IuDz+XS59QmmmkyqHhMk/M2/g9N9FPsMsK9CDgf6fjX/AEN+7kB6D6KADirTZJLzT+yHjo0uspM0pP3GSf8A9NYiiOlxr9N
    # /PJbHBFdIL7FqXuOl6BSRx12KfEItaPJt9OxrUX6iahqOJ3zZOrkXmbXnMKajC4tdSxySmrvlG6OljlhjknTVp89eSc2glvhtl8nHXbHK1CawbkirRT
    # /5eJ/zI7XiGnjHRNLmTrk4+gwTyanbFcrk1zWeo9btRKiTFeVWuSa9LOjmjbXQlIlKiQiKrsWJUhUmPVAQAABz1Yy9yF7IlJ97KiU4jJrsQorsNToBkmyrWY92Bpda4ZYixwWSG1mO
    # /HTj1z8mNxw43iSflXlff3KYZpXSxbPh2dXC5QSx0pONLp278+o0dNp4yTePc/WTfJmyOk2MWPBl1LUVjc0utrg1Y9Dh0kt0cWyUlfPU6OGeFcRSxza2qa5ooztPJSUltVeZ2zXMn8Z6uqqQUNwBpzL0BWw
    # /NL2GoAQxCBhEX7ACXAAY0kibSESk+rJ29+pUM5ehMVa5ISa7DWAy4Ell2yq6Y1izxQypua5S4p0Z6mxvi5V0M8IxpMozaiK5ckjHDDNZNsnK3xsl5W
    # /h9GaI6fG4r6sZWuN6XT2kuzM/Su9EM+6Mmm3S492dDI7ySfq2VYdJCGSMoR3qPmt8IdosmeuXaGyOWyG+eGMm0jTmZRQUCl7BuQBTB
    # +5NoWTsCefQCVQBWJDJCrglWyodDpIROhgJ2pk7Nyp3T/k3L90Qhra/Lw/W6oLz+qWWLyVCDUPTbvh+zXKIq5w/2m30bTb4+epOOee1LLBTk
    # /1Y07+64ZOXJdLJPPB96f8AlmnqnrV9JfT2XklKty3JpL79TLOX6UbMEljxtvfapJzfLX+OP3MUUpJSXfkzXD5PRFDoimiba6ojmAItMGwJtAuqEsE
    # +QLUAlgBjU16jp33K4pLnuDim/couTGRTG13v5HU/VEFqY0ZNNNditSGTt8K37AZ4a7FknOLypSjJxqaW5f8An9DRi1EMEJTyNRX8X5b
    # /AHbb+x5bxbyeI6iPpNmWMuOEbdPyXHoNf419WLxafo+HOq+y/uzo6KanpMT77Tx31JfB6PwPK5aGm72yaJfGLddWwsr3E3yZQzpitehJEuUBD
    # +RU+WgukKnbYFgC2AGS2TYlk2VD8jL5K7J3AWWiY5tk+H5kvL8+pVZFJPd3JVee8Sbevy/P9jPHqdfU+HfVyyyLMo7ndNWZl4bmjqFBuLjf5kzWyRctZFDc6s7nguPLihkU4OMHTTao06fSw08ksS
    # /Rb9y9Tfcz9tLMWdxl0K1JD2ENYNi2RYBJiRYSdISL45AtsBEwAy2CZUuWOmVD2TYlkOVAWOVcsR5N0vYplkbZEZrdUmWTTcPmTmqXUbF5IQTdujo6eOCWPJFbVOltbMU8kVPzJccE65tmPRz8eeq1rHHVONqkqps0qVoo2weaU49GWpoX
    # /HG22rLDcIF0RDqbsbf6lNkoCybTi+exXYsgpoCywEtrsAGVdhkwAqBFeRsAATsJJWr7oAAR5Zvi39xoXKXLYAdOqztvrZBbUkixABybMnwRuYAAxHQAKgl2ITtJMAIqVygAAP
    # /Z';  
    #如果返回是201 就把$show_tip 设置为0
    my $show_tip = 1;
    sub login {
        while (1) {
            my $api ="https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=$uuid&tip=$show_tip&r=-$now&_=$now";
            my $response = $ua->get($api);
    		print "1--$show_tip is $show_tip
    ";
    		print "2--$api is $api
    ";
    		sleep (2);
            $ua->default_headers;
            if ( $response->is_success ) {
                $r = $response->decoded_content;
                print "$r is $r
    ";
                next unless defined $r;
                my %data = $r =~ /window.(.+?)=(.+?);/g;
                if ( $data{code} == 201 ) {
                    print"手机微信扫码成功,请在手机微信上点击 [登录] 按钮...
    ";
                    $show_tip = 0;
    				##回到循环顶部,此时请求的url是"https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=$uuid&tip=$show_tip&r=-$now&_=$now";
    				
                    next;
                }
                elsif ( $data{code} == 200 ) {
                    print "正在进行登录...
    ";
                    foreach ($r) {
                        if ( $_ =~ /window.redirect_uri="(.*?)"/ ) 
    					   {
                            $api = $1;
                            print "$api is $api
    ";
                            my $response = $ua->get($api);
                            $ua->default_headers;
                          }
                    }
    				};
                  
                        if ( $api =~ /https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=(.*?)&uuid=(.*?)&lang=(.*?)&scan=(.*)/
                          )
                        {
                            print "$1 is $1
    ";
                            print "$2 is $2
    ";
                            print "$3 is $3
    ";
                            print "$4 is $4
    ";
                            $ticket=$1;
                            $user = $4;
                            print "$user is $user
    ";
                            return 1;
                        }
    					}
                else {
                    die $response->status_line;
                     }
    
            }
    	};
    	&login();
    	    my $api ="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=$ticket&uuid=$uuid&lang=zh_CN&scan=$user&fun=new&version=v2&lang=zh_CN";
            my $response = $ua->get($api);
            $ua->default_headers;
    
            if ( $response->is_success ) {
              print $response->decoded_content;    # or whatever
              $r = $response->decoded_content;
              if ( $r =~/<error.*<skey>(.*?)</skey><wxsid>(.*?)</wxsid><wxuin>(.*?)</wxuin><pass_ticket>(.*?)</pass_ticket.*/
              )
            {
                $Skey        = $1;
                $wxsid       = $2;
                $wxuin       = $3;
                $pass_ticket = $4;
    
                print "$Skey is $Skey
    ";
                print "$wxsid is $wxsid
    ";
                print "$wxuin is $wxuin
    ";
                print "$pass_ticket is $pass_ticket
    ";
                $Skey_x = uri_escape($Skey);
                use POSIX;
                my $a = "e";
                for ( my $b = 0 ; 15 > $b ; $b++ ) {
                    $a .= POSIX::floor( 10 * rand() );
                }
                $DeviceID = $a;
            }
    
        };
    my @chatroom_id = ();
    
    #my $response= $browser->post("https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit", [ "r" => "-$now","lang" => "zh_CN","pass_ticket"=>"$pass_ticket"]);
    my     $login_url ="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-$now&lang=zh_CN&pass_ticket=$pass_ticket";
        my $post = {
            BaseRequest => {
                Uin      => $wxuin,
                Sid      => $wxsid,
                Skey     => $Skey,
                DeviceID => $DeviceID,
            }
        };
        use JSON qw(encode_json);
        $json_string = encode_json($post);
    
        my $req = HTTP::Request->new(
            'POST' => $login_url,
            [ 'r' => "-$now", 'lang' => 'zh_CN', 'pass_ticket' => "$pass_ticket" ]
        );
        $req->referer("https://wx.qq.com/?&lang=zh_CN");
        $req->content_type('application/json; charset=UTF-8')
          ;    #post请求,如果有发送参数,必须要有这句
        $req->content("$json_string");    #发送post的参数
        my $res = $ua->request($req);
    	print $res->content();            #获取的是响应正文


  • 相关阅读:
    windows php
    使用 powershell 的 grep 过滤文本
    一个命令巧妙查看git版本演变史
    面试官一听就想发offer的自我介绍,到底是怎么做的?
    用了5年的git,你竟然还不知道它的工作原理
    接口测试到底怎么做,看完这篇文章彻底搞清楚
    一文学会jenkins pipline自动化构建
    Fiddler经典版安装设置流程
    没想到一个简单的重命名,在git中也有这么多学问
    1小时学会jenkins集成邮件/微信/钉钉通知
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6198979.html
Copyright © 2020-2023  润新知