使用PHP模擬post提交資料
這也是個老生常談的話題了,上午花了點時間把這個問題整理了一下。
一般來說用PHP來模擬post提交資料有三種方法,file_get_contents、curl和socket。
寫了個公用函式,專門用來列印post資料:
<?php
function pr() {
$params = func_get_args();
foreach ($params as $key => $value) {
echo "<pre>";
print_r($value);
echo "</pre>";
}
}
先寫一個post.php,用來接收post資料並打印出來:
<?php require dirname(__FILE__).'/function.php'; if (isset($_POST) && !empty($_POST)) { pr($_POST); } else { pr("NO POST DATA!"); }
下面是用file_get_contents來模擬post:
<?php
require dirname(__FILE__).'/function.php';
function file_get_contents_post($url, $post) {
$options = array(
'http' => array(
'method' => 'POST',
// 'content' => 'name=caiknife&[email protected]',
'content' => http_build_query($post),
),
);
$result = file_get_contents($url, false, stream_context_create($options));
return $result;
}
$data = file_get_contents_post("http://www.a.com/post/post.php", array('name'=>'caiknife', 'email'=>' [email protected]'));
var_dump($data);
很簡單是吧?再來看看curl模擬post:
<?php
require dirname(__FILE__).'/function.php';
function curl_post($url, $post) {
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$data = curl_post("http://www.a.com/post/post.php", array('name'=>'caiknife', 'email'=>' [email protected]'));
var_dump($data);
最後是用socket來模擬post:
<?php
require dirname(__FILE__).'/function.php';
function socket_post($url, $post) {
$urls = parse_url($url);
if (!isset($urls['port'])) {
$urls['port'] = 80;
}
$fp = fsockopen($urls['host'], $urls['port'], $errno, $errstr);
if (!$fp) {
echo "$errno, $errstr";
exit();
}
$post = http_build_query($post);
$length = strlen($post);
$header = <<<HEADER
POST {$urls['path']} HTTP/1.1
Host: {$urls['host']}
Content-Type: application/x-www-form-urlencoded
Content-Length: {$length}
Connection: close
{$post}
HEADER;
fwrite($fp, $header);
$result = '';
while (!feof($fp)) {
// receive the results of the request
$result .= fread($fp, 512);
}
$result = explode("\r\n\r\n", $result, 2);
return $result[1];
}
$data = socket_post("http://www.a.com/post/post.php", array('name'=>'caiknife', 'email'=>'[email protected]'));
var_dump($data);
這三種方法最後看到的內容都是一樣的,但是在是用socket的時候,傳送header資訊時必須要注意header的完整資訊,比如content type和content length必須要有,connection: close和post資料之間要空一行,等等;而通過socket取得的內容是包含了header資訊的,要處理一下才能獲得真正的內容。
相關推薦
使用PHP模擬post提交資料
這也是個老生常談的話題了,上午花了點時間把這個問題整理了一下。 一般來說用PHP來模擬post提交資料有三種方法,file_get_contents、curl和socket。 寫了個公用函式,專門用來列印post資料: <?php function pr() {
PHP利用CURL方法模擬POST提交資料並獲得返回值的小細節
背景:我與同事之間互相呼叫API,進行資料處理,並返回處理結果 互動:我傳遞一個圖片資訊過去,他那邊給我返回一個識別影象結果的json物件。 方法:使用php的自帶curl函式 詳情: 一.開啟擴充套件服務:開啟php.ini檔案,把 “;extension=php_
php模擬post提交提交json數據
curl<?php header("Content-type:application/json;charset=utf-8"); $url="http://192.168.10.234:8080/uc/login/loginid"; $param=array( //註冊字段 "name
php實現post提交資料
<?php $encode='UTF-8'; //頁面編碼和簡訊內容編碼為GBK。重要說明:如提交簡訊後收到亂碼,請將GBK改為UTF-8測試。如本程式頁面為編碼格式為:ASCII/GB2312/GBK則該處為GBK。如本頁面編碼為UTF-8或需要支援繁體,阿拉
php curl post提交資料失敗解決方法
function http_req($http_type, $method, $url, $data) { $ch = curl_init(); if (strstr($http_typ
php模擬post提交(方法二)
index.php <? /** * 模擬post進行url請求 *QQ:874689017 通達OA專業二次開發 * @param string $url
cURL模擬POST提交資料
首先,是這個程式碼: <?php //curl模擬post提交資料$url = "http://127.0.0.1/immoc/output.php";$post_data = array("f
php curl 模擬post提交
模擬post提交,用於測試 /** * 模擬post進行url請求 * @param string $url * @param string $param */ function re
ASP模擬POST提交,然後XMLHTTP獲取資料總是亂碼,請大家幫忙,感謝!
目前在建的一個專案要求使用外部的一個網站達到切詞的目的,由於外部網站的API介面要求必須是POST提交資料,因此只能模擬POST提交,然後再去讀取提交後的資料,我用以下的程式碼,獲取回來的中文總是亂碼,英文和數字沒有問題,請大家幫忙看看,非常感謝!<%On error
模擬post提交,保持session不變
final 登陸 exceptio read msi tor inpu amr dom public static String sendPost(String url, String param) { PrintWriter out = null; BufferedR
四種常見的POST提交資料方式
HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務端提交資料,本文主要討論 POST 提交資料的幾種方式。 我們知道,HTTP 協議是以 ASCII 碼
POST提交資料時四種常見的資料格式
最近專案部署到新環境tomcat+mysql,想看看專案部署成功沒有,就用soupui調對應介面開測試,soupui使用比較簡單,給上介面地址,入參xml報文,把入參的media Type設定為application/xml 點選呼叫就可以了。但是點選呼叫返回值為空。對,就是啥都沒返回。XM
application/json 四種常見的 POST 提交資料方式
application/json 四種常見的 POST 提交資料方式 轉載宣告: 本文系轉載自以下兩篇文章: 四種常見的 POST 提交資料方式 作者: 滄海一滴 轉載僅為方便學習檢視,一切權利屬於原作者,本人只是做了整理和排版,如果帶來不便請聯絡我刪除。
Content-Type 四種常見的 POST 提交資料方式
參考於: https://blog.csdn.net/tycoon1988/article/details/40080691(瞭解) 和: https://www.gy0929.com/wz/1420.html?_d_id=7ff19a05e92534d3df987da4343f71(設定) 和:
“四種常見的 POST 提交資料方式”與之對應的“content-type取值”
application/x-www-form-urlencoded 這應該是最常見的 POST 提交資料的方式了。瀏覽器的原生 form 表單,如果不設定 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交資料
前端四種常見的 POST 提交資料方式
HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務端提交資料,本文主要討論 POST 提交資料的幾種方式。我們知道,HTTP 協
HttpClient gzip壓縮post提交資料
ButtongzipButton = (Button) findViewById(R.id.button1);//按鈕1-gzip壓縮 ButtonnogzipButton = (Button) findViewById(R.id.button2);//按鈕2-正常傳送
四種常見的 POST 提交資料方式
最近為專案組提供rest api 時遇到了關於介面引數的傳遞問題,主要是沒有充分考慮到第三方呼叫者的使用方式,應該儘量的去相容公司之前提供出去的介面呼叫方式,這樣可以降低第三方呼叫者的學習成本,儘管之前的方式並不是那麼的推薦,好的做法是即相容老的做法也支援推薦的做法。 對於基於http post介面,Co
laraval中使用post提交資料中報token的問題
在我們使用laravel框架做專案時,經常會使用post方法提交資料,例如檔案上傳,表單提交,或者處理一些大資料。 我相信大家對於用post提交表單資料時的token處理都懂,就是傳一個隱藏域 <input type="hidden" name="_token" va
使用jQuery POST提交資料返回的JSON是字串不能解析為JSON物件
剛開始介入程式設計,很多東西自己不是一下就能搞定的,剛開始犯的錯還不少。 藉助CSDN部落格當做自己的筆記。 今天用jQuery的POST提交資料,我需要用他返回的資料, [javascript] view plaincopy jQuery.pos