用php模拟post来提交数据

网络整理 - 07-26

利用php的socket编程来直接给接口发送数据来模拟post的操作。

<?PHP /************************************************************************
Name: POST 测试程序 Vesion: 1.0 Date: 2004-08-05 *************************************************************************
/ $flag = 0;
 //要post的数据
$argv = array(
    'var1'=>'abc',
    'var2'=>'你好吗');
//构造要post的字符串
foreach ($argv as $key=>$value) {
    if ($flag!=0) {
        $params .= "&";
        $flag = 1;
    }
    $params.= $key."="; $params.= urlencode($value);
    $flag = 1;
    }
    $length = strlen($params);
     //创建socket连接
    $fp = fsockopen("127.0.0.1",80,$errno,$errstr,10) or exit($errstr."--->".$errno);
    //构造post请求的头
    $header = "POST /mobile/try.php HTTP/1.1\r\n";
    $header .= "Host:127.0.0.1\r\n";
    $header .= "Referer:/mobile/sendpost.php\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: ".$length."\r\n";
    $header .= "Connection: Close\r\n\r\n";
    //添加post的字符串
    $header .= $params."\r\n";
    //发送post的数据
    fputs($fp,$header);
    $inheader = 1;
    while (!feof($fp)) {
        $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据
        if ($inheader && ($line == "\n" || $line == "\r\n")) {
             $inheader = 0;
        }
        if ($inheader == 0) {
            echo $line;
        }
    }
fclose($fp);
?>

还可以使用php类HttpClient

Snoopy
or httpClient