php用file_get_contents、fsockopen发送http请求、同步&异步

同步异步主要指的是消息通知的方式

同步:调用者一直等被调用者返回

异步: 调用者不等被调用者返回,直接继续执行

$content = stream_context_create(['http' => ['timeout' => 3]]);
$resp_ip = @file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip={$req_ip}", false, $content);
function SocketPost($data, $target)
{
    $url_info = parse_url($target);
    $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
    $httpheader .= "Host:" . $url_info['host'] . "\r\n";
    $httpheader .= "Content-Type:application/x-www-form-urlencoded\r\n";
    $httpheader .= "Content-Length:" . strlen($data) . "\r\n";
    $httpheader .= "Connection:close\r\n\r\n";
    //$httpheader .= "Connection:Keep-Alive\r\n\r\n";
    $httpheader .= $data;

    $fd = fsockopen($url_info['host'], 80);
    fwrite($fd, $httpheader);
    
    usleep(10000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功
    
    $gets = "";
    while (!feof($fd)) {
        $gets .= fread($fd, 128);
    }
    fclose($fd);

    // 如果不判断返回值,底下的可以注释
    if ($gets != '') {
        $start = strpos($gets, '<?xml');
        if ($start > 0) {
            $gets = substr($gets, $start);
        }
    }
    return $gets;
}
$post_data = 'aa=3333';
$target = 'http://localhost/lianxi/1xiaoyu/default1.php';
$res = SocketPost($post_data, $target);

var_dump($res);




/**
 * 发起异步get请求,忽略返回值
 * @param string $url
 * @param array $data
 */
function socketGet($url, $data = [])
{
    $query_str = '';

    if ($data) {
        foreach($data as $k => $v){
            $query_str .= ($k . "=" . $v . "&");
        }
    }

    $info = parse_url($url);
    $head = "GET ".$info['path']."?".$query_str." HTTP/1.0\r\n";
    $head .= "Host: ".$info['host']."\r\n";
    $head .= "\r\n";
    $fp = fsockopen($info["host"], 80);

    fwrite($fp, $head);
    usleep(10000); // 这一句也是关键,如果没有这延时,可能在nginx服务器上就无法执行成功

//    $response = '';
//    while($row=fread($fp, 4096)){
//        $response .= $row;
//    }

    fclose($fp);

//    return $response;
}

php异步请求的几种方式:php异步请求的几种方式

常用异步方式:

1、ajax
2、fsockopen
3、队列 + 推送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值