使用PHP模拟ajax请求的源代码

我已经试过了,非常好用。

/**
 * 构造ajax请求,不支持https
 */
function ajax_http_request($url, $data = array(), $type = "post", $params = array(), $accept = "", $ua = "", $referer = "", $file = false)
{
    $http = strtolower(substr($url, 0, 7));
    $type = strtolower($type);

    $url_params = parse_url($url);

    if (!$url_params) {
        echo ‘url错误‘;
        return false;
    }

    $hostip = gethostbyname($url_params[‘host‘]);

    if (!$hostip) {
        echo ‘无法访问服务器‘;
        return false;
    }

    $fp = fsockopen($url_params[‘host‘], 80, $errno, $errstr, 30);

    if (!$fp) {
        echo "$errstr ($errno)<br />";
        return false;
    }

    $query_string = http_build_query($data);

    if ($type == ‘post‘) {
        $out = ‘POST ‘.$url_params[‘path‘]." HTTP/1.1\r\n";
    } else {
        if (strpos($url, ‘?‘) != false) {
            $path = $url .‘&‘.$query_string;
        } else {
            $path = $url . ‘?‘.$query_string;
        }

        $out = ‘GET ‘.$path.‘ HTTP/1.1‘."\r\n";
    }

    $out .= ‘Host: ‘.$url_params[‘host‘]."\r\n";

    $out .= "Connection: Close\r\n";

    if ($type == ‘post‘) {
        if ($file) {
            $out .= ("Content-Type: multipart/form-data\r\n"); // ajax文件上传暂时没有此功能
        } else {
            $out .= ("Content-Type: application/x-www-form-urlencoded\r\n");
        }
        $out .= ("Content-Length: ".strlen($query_string)."\r\n");
    }

    if (isset($ua)) {
        $out .= (‘User-Agent: ‘.$ua."\r\n");
    } else {
        $out .= ("User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36\r\n");
    }

    if (isset($referer)) {
        $out .= (‘Referer: http://‘.$url_params[‘host‘].‘/‘.$referer."\r\n");
    } else {
        $out .= (‘Referer: http://‘.$url_params[‘host‘]."\r\n");
    }

    $out .= ("Origin: http://".$url_params[‘host‘]."\r\n");
    $out .= ("X-Requested-With: XMLHttpRequest\r\n");
    $out .= ("Accept:application/json, text/javascript, */*\r\n");

    $out .= "Accept-Language:zh-CN,zh;q=0.8,en;q=0.6\r\n\r\n";

    if ($type == ‘post‘) {
        // 接下来是消息体信息
        $out .= $query_string;
    }

    fwrite($fp, $out);

    $output = "";

    while (!feof($fp)) {
        $output .= fgets($fp, 128);
    }

    fclose($fp);

    $result = explode("\r\n\r\n", $output);
    $result = explode("\r\n",$result[1]);
    array_pop($result);
    array_shift($result);
    return implode("\r\n", $result);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 04:48:24

使用PHP模拟ajax请求的源代码的相关文章

模拟ajax请求爬取微博

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/26 10:26 # @Author : Sa.Song # @Desc : 抓取崔庆才微博, 模拟ajax请求 # @File : weiBo.py # @Software: PyCharm import requests from urllib.parse import urlencode from pyquery import PyQuery as pq heade

POSTMAN模拟AJAX请求

环境: 1.测试工具:POSTMAN 2.调试框架:THINKPHP 3.开发工具:PHPSTORM 需求: 1.判断HTTP提交过来的请求是否为AJAX: 是:进行,修改.新增 否:进行查询,并返回一条记录 配置: 1.POSTMAN配置: 1)提交模式:POST 2)Headers增加参数: Content-Type 为:application/x-www-form-urlencoded X-Requested-With 为:xmlhttprequest 3)Body选择为:x-www-fo

使用jquery-mockjax模拟ajax请求做前台测试

一般来说,我们做web开发的时候前后台是分开做的,这样带来的好处是前台的开发人员可以安心的写前台代码而后台的小伙伴就安心研究后台就OK了. 但是这样带来一个问题,当后台的小伙伴被天灾军团带走了,那前台需要依赖后台服务的代码怎么办呢?  方法是有的: 寻求近卫军团帮忙 近卫军团有很多选手,今天要说的是 jQueryMock 这位.   mockjax官方地址:https://github.com/appendto/jquery-mockjax/ 首先在你需要测试的页面里引入 <script src

curl 模拟ajax 请求

主要是在header请求里加一个  X-Requested-With: XMLHttpRequest curl -v -H "X-Requested-With: XMLHttpRequest"  -e "http://bj.meituan.com/dianying/79232/" http://bj.meituan.com/movie/hotcomments/79232

Postman 工具模拟Ajax请求

1.请求方式 post 2.headers设置:X-Requested-With:XMLHttpRequest    代码判断是以此为依据的 (Content-Type:application/x-www-form-urlencoded) 3.body中可以写请求参数,不过要设置编码方式(我没有传值) 原文地址:https://www.cnblogs.com/wayne173/p/9591486.html

C#后台HttpWebRequest模拟跨域Ajax请求,注册Windows服务到服务器上

项目需求,暂且叫A.B公司吧.我们公司需要从A公司哪里读取机器上的数据,放到我们数据库中.然后再将数据库中存的数据,提供一个接口,B公司来调用,大概这个意思. 好了,言归正传.这个是之前做好的界面,用户需要手动点击“开始”,然后写了个定时器,不停的来回调用 部分源码(5秒调用后台处理) 1 function refreshCount() { 2 if (prj.is_port_state_1 == false) { 3 var grid_down = query_panel.grid_down;

爬虫—Ajax请求的确定

有时候在抓取页面的时候,我们得到的结果和浏览器中看到的的结果是不一样的.在浏览器中可以正常看到的界面,使用requests不能够正确的得到.这是因为requests得到的是原始的html文档,而浏览器的页面则是经过JavaScript处理后生成的数据,这些数据的来源很多,其中有一种是使用Ajax技术加载的.还有另外两种是经过JavaScript和特定算法生成的.以及包含在html文档中的. 对于Ajax方式的数据加载方式,它是一种异步加载的方式,原始页面最初的时候不会包含某些数据.而是在加载完成

初识vue 2.0(3):Ajax请求

0,模拟ajax请求,需要构建web程序,使用express 方便快捷. 1,安装express 构建web server: npm install -g express npm install -g express-generator 2,创建 express 项目: express myserver cd myserver npm install 3,启动项目,一般情况下可以使用: npm start 但开发环境需要监控代码变动并自动重启进程,因此需要安装 supervisor. npm i

利用gulp搭建本地服务器,并能模拟ajax

工作中可能会用到的小工具,在此记录一下.可以实现的功能有: 本地http服务器 页面实时刷新 可以模拟ajax请求 第一步,新建package.json文件.用到了gulp.gulp-webserver.gulp-livereload package.json的内容如下: { "name": "localserver", "version": "1.0.0", "description": "&q