//Simulate get post request Function /* Function description: Function: The request method can be get, post, cookies that can be sent, and saved cookiefiles Parameters: $url-----Request url $referer- --Source url $postdata----------Data used for post request, ''for get request $cookie---------Cookie sent $cookiefile--- --Saved cookiefile file Return value: Return the obtained source code */ function request($url,$referer='',$postdata='',$cookie='',$cookiefile =''){ //header setting $header=''; $header.="Content-Type: application/x-www-form-urlencodedrn";//Content request type $header.="User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729 ; Media Center PC 6.0)rn";//Browser field $header.="Referer:".$referer."rn";//Set source address $header .= "Cookie:". $cookie; //Set cookie, default empty //Request method get post, pass $postdata empty---get, non-empty----post if($postdata=='')$method ='GET'; else $method='POST'; //Define the array used to create the stream $opts=array(); $opts['http']=array ('method'=>$method,'header'=>$header,'content'=>$postdata); //Generate stream $context=stream_context_create($opts); //Send a request and get the source code $yuanma=file_get_contents($url,false,$context); //Whether you need to save cookies to a file, when $cookiefile is not empty if($cookiefile! =''){ echo 'Need to save cookies '; //Judge whether the saved file exists or create it if it does not exist if(!file_exists($cookiefile)){ file_put_contents($ cookiefile,''); } //Get cookies and save them $response=implode("rn",$http_response_header); //Use regular expressions to match cookies $zengze ="/Set-Cookie:(.*?)rn/"; preg_match_all($zengze,$response,$cookie_arr); //There is a match, save it if(!empty($cookie_arr [1])){ $cookiestr=implode(';',$cookie_arr[1]); file_put_contents($cookiefile,$cookiestr); echo 'Successfully saved cookie '; } else echo 'No cookie matched '; }//end if($cookiefile!='') //Return to source code return $yuanma; }//end function request($url,$referer,$postdata,$cookie,$cookiefile)
//Get the current script URL function GetCurUrl() { if(!empty($_SERVER["REQUEST_URI"])) { $scriptName = $_SERVER["REQUEST_URI"]; $nowurl = $scriptName; } else { $scriptName = $_SERVER["PHP_SELF"]; if(empty($_SERVER["QUERY_STRING"])) { $nowurl = $scriptName; } else { $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"]; } } return $nowurl; }
//Get the current file name $nowurl=GetCurUrl(); //echo $nowurl;
//Form output, when not submitted if(!isset($_POST['qq'])){ echo ' '; die(); }
/* Submission parameter description: $_POST['qq']---User QQ $_POST['g_tk']--This parameter is very critical. To obtain this parameter, you need to grab the g_tk=1276354485 called after the post address submitted when publishing. g_tk=1276354485 in POST http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk=1276354485 $_POST['title']---Article title, not allowed Empty $_POST['content']---Article content, cannot be empty */
header('Content-Type:text/html;charset=gb2312'); set_time_limit(0); //ob_end_clean(); //ob_start();
//Get the cookie file, there is no creation, and exit the program $cookiefile=dirname(__FILE__).'qq_cookie.txt'; if(!file_exists($cookiefile)){ echo 'qq_cookie.txt does not exist, it will be created automatically. Please fill in the captured cookie '; file_put_contents($cookiefile,''); die('Program exit'); } //Exists, read cookie else{ $cookie=file_get_contents($cookiefile);//Login cookie //$cookie=urlencode($cookie); } //echo 'cookie:'.$cookie.' ';
//Important information that constitutes the publishing page, post data, etc. //qq number if(empty( $_POST['qq'])||preg_match('/[^0-9]/is',$_POST['qq']))die('The qq number is wrong, it must be digits'); else $qq=$_POST['qq'];//qq number if(empty($_POST['g_tk'])||preg_match('/[^0-9]/is',$_POST[' g_tk']))die('post important parameter g_tk is illegal and must be a number, please use the value of the captured packet'); $g_tk=$_POST['g_tk'];
$title= empty($_POST['title'])?die('title must not be empty'):$_POST['title'];//Article title $content=empty($_POST['content'])?die ('Content cannot be empty'):$_POST['content'];//Content
$category='Personal Diary';//Category $fabiao='http://b1.qzone .qq.com/cgi-bin/blognew/blog_add?g_tk='.$g_tk;//Posting processing page $referer='http://ctc.qzs.qq.com/qzone/v5/toolpages/ fp_gbk.html';//Source page $r1='http://user.qzone.qq.com/'.$qq.'/infocenter';//List access source page $postdata= 'uin='.$qq.'&category='.urlencode($category).'&title=".urlencode($title)."&content='.urlencode($content).'&html='.urlencode('< ;div class="blog_details_20110920">'.$content.'').'&tweetflag=0&cb_autograph=1&topflag=0&needfeed=0&g_tk='.$g_tk.'&_fp_refer=http%3A%2F%2Fctc. qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%7Chttp%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%3Chttp% 3A%2F%2Fuser.qzone.qq.com%2F'.$qq.'%2Fmain';//post data //$postdata=urlencode($postdata); //echo $postdata; //Send a request and get the source code $yuanma=request($fabiao,$r1,$postdata,$cookie,''); if(strpos($yuanma,'Published successfully')) echo $title.' Published successfully '; else echo 'Published failed: right-click to view the source code, you can see the specific error'.$yuanma;
?>
php script: Note that you need to save the name and it will be automatically recognized. I named it qq_fabiao.php, and then set the submission address. The cookie file qq_cookie.txt needs to fill in the space obtained by the packet capture. Login cookie to pass login verification, qq_cookie.txt is in the same directory as the php file
/ * Submission parameter description: $_POST['qq']---User QQ $_POST['g_tk']--This parameter is very critical. To obtain this parameter, you need to grab it and submit it when publishing. g_tk=1276354485 called after the post address, g_tk=1276354485
$_POST['title']---Article title, must not be empty$_POST['content']---Article content, must not be empty
|