ホームページ > バックエンド開発 > PHPチュートリアル > phpポストリクエストとjqueryポストリクエストの間に違いはありますか?何をするか

phpポストリクエストとjqueryポストリクエストの間に違いはありますか?何をするか

WBOY
リリース: 2016-06-13 13:22:03
オリジナル
818 人が閲覧しました

phpポストリクエストとjqueryポストリクエストの間に違いはありますか?
php ソケット http リクエスト、

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
public function sendpost($postType='POST')
    {
        $url = $this->postURL;
        $data = $this->postData == '' ? array() : $this->postData;
        //先解析url
        $url = parse_url($url);
        $url_port = !isset($url['port']) ? (($url['scheme'] == 'http') ? 80 : 443) : $url['port'];
        if (!$url)
        {
            $this->errMessage = "couldn't parse url";
            return false;
        }
        //将参数拼成URL key1=value1&key2=value2 的形式
        $encoded = "";
        while (list($k, $v) = each($data))
        {
            $encoded .= ($encoded ? '&' : '');
            $encoded .= rawurlencode($k)."=".rawurlencode($v);
        }
        //echo $encoded;exit;
        $len = strlen($encoded);
        //拼上http头
        $out = "{$postType} ".$url['path'].(isset($url['query']) ? ('?'.$url['query']) : '')." HTTP/1.1\r\n";
        $out .= "Host:".$url['host']."\r\n";
        $out .= "Content-type: application/x-www-form-urlencoded\r\n";
        $out .= "Connection: Close\r\n";
        $out .= "Content-Length: $len\r\n";
        $out .= "\r\n";
        $out .= $encoded."\r\n";
        //打开一个sock
        $fp = @fsockopen($url['host'], $url_port);
        $line = "";
        if (!$fp)
        {
            $this->errMessage = "$errstr($errno)\n";
            return false;
        }
        else
        {
            fwrite($fp,$out);
            while (!feof($fp))
            {
                $line .= fgets($fp, 2048);
            }
        }
        //去掉头文件
        if ($line)
        {
            $body = stristr($line, "\r\n\r\n");
            $body =substr($body, 4, strlen($body));
            $line = $body;
        }
        fclose($fp);
        return $line;
    }

ログイン後にコピー


を書きました。同時に、jquery の ajax リクエストを使用してテストしました。

JScript コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
$.ajax({
                    type : "POST",
                    cache : false,
                    url : _url,
                    data : _data,
                    dataType : 'json',
                    success : function(data) {
                        
                    }
                });

ログイン後にコピー


php リクエストは常に間違った情報を返すのに対し、ajax リクエストはすべて正しい情報を返す必要があることがわかりました。データ、違いはありません。
サーバーは、それが ajax リクエストであるか php リクエストであるかを検出することもできますか?

-----解決策---------
PHP コード
[ユーザー:root 時刻:03:17:09 パス:/home/apache/web]$ cat test.php
<?php
// http のみ、エラー チェックなし。
関数 post_request($url, $data) {
        $post_data = http_build_query($data);
        $request = "POST /main.php HTTP/1.1rn" 。
                           「ホスト: 192.168.1.10rn」 。
                           "Content-Type: application/x-www-form-urlencodedrn" 。
                           "コンテンツの長さ: " .strlen($post_data) 。
                           $post_data;
        echo $request .PHP_EOL;
        $sockfd = fsockopen("192.168.1.10", 80);
        fwrite($sockfd, $request);
        $response = "";
        while (($ret= fgets($sockfd)) !== false) {
                $response .= $ret;
        }
        $response を返します。
}

$response = post_request("http://192.168.1.10/main.php", array('a' => "baidu", 'b' => "クライアント バックエンド"));
$response をエコーし​​ます。
?>
[ユーザー:root 時刻:03:17:12 パス:/home/apache/web]$ cat main.php
<?php
echo $_POST['a'] .PHP_EOL;
echo $_POST['b'] .PHP_EOL;
?>
<br><font color="#e78608">------解決策------------------</font><br>また、https のコードは無力なので、使用する必要があります。 PHP でサポートされているコンテキスト パラメーターを使用して、stream_context_create を file_get_contents などと組み合わせて使用​​したり、fopen などを使用したり、curl を直接使用したりできます。
 <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート