>  기사  >  백엔드 개발  >  PHP를 사용하여 Ajax 요청을 시뮬레이션하기 위한 소스 코드

PHP를 사용하여 Ajax 요청을 시뮬레이션하기 위한 소스 코드

WBOY
WBOY원래의
2016-08-08 09:20:441894검색

해봤는데 아주 효과가 좋습니다.

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

    <span>$url_params</span> = parse_url(<span>$url</span>);

    <span>if</span> (!<span>$url_params</span>) {
        <span>echo</span><span>'url错误'</span>;
        <span>return</span><span>false</span>;
    }

    <span>$hostip</span> = gethostbyname(<span>$url_params</span>[<span>'host'</span>]);

    <span>if</span> (!<span>$hostip</span>) {
        <span>echo</span><span>'无法访问服务器'</span>;
        <span>return</span><span>false</span>;
    }

    <span>$fp</span> = fsockopen(<span>$url_params</span>[<span>'host'</span>], <span>80</span>, <span>$errno</span>, <span>$errstr</span>, <span>30</span>);

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

    <span>$query_string</span> = http_build_query(<span>$data</span>);

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

        <span>$out</span> = <span>'GET '</span>.<span>$path</span>.<span>' HTTP/1.1'</span>.<span>"\r\n"</span>;
    }

    <span>$out</span> .= <span>'Host: '</span>.<span>$url_params</span>[<span>'host'</span>].<span>"\r\n"</span>;

    <span>$out</span> .= <span>"Connection: Close\r\n"</span>;

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

    <span>if</span> (<span>isset</span>(<span>$ua</span>)) {
        <span>$out</span> .= (<span>'User-Agent: '</span>.<span>$ua</span>.<span>"\r\n"</span>);
    } <span>else</span> {
        <span>$out</span> .= (<span>"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"</span>);
    }

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

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

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

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

    fwrite(<span>$fp</span>, <span>$out</span>);

    <span>$output</span> = <span>""</span>;

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

    fclose(<span>$fp</span>);

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

저작권: 이 글은 해당 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.

위 내용은 PHP를 사용하여 ajax 요청을 시뮬레이션하는 소스 코드와 관련 내용을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.