phpポストリクエストとjqueryポストリクエストの間に違いはありますか?
php ソケット http リクエスト、
<!-- 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; }
<!-- 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) { } });
[ユーザー: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>