file_get_contents版本:
/**
04
|
* @param string $url 請求位址
|
08
函數 | send_post(
函數
$post_data |
){
= http_build_query(
$post_data
=>
數組
14
|
'內容類型:application/x-www-form-urlencoded' ,
|
15
//逾時時間(單位:s)
);
|
$context =stream_context_create( $選項 );
|
;
23
23
,
'邯郜
5
send_post( |
'http://blog.snsgou.com' ,
$post_data );
|
實戰經驗:
當我利用上述程式碼給另一台伺服器發送http請求時,發現,如果伺服器處理請求時間過長,本地的PHP會中斷請求,即所謂的超時中斷,第一個懷疑的是PHP本身執行時間的超過限制,但想想也不應該,因為老早就按照這篇文章設定了「PHP執行時間限制」(【推薦】PHP上傳檔案大小限制大全),仔細琢磨,想想,應該是http請求本身的一個時間限制,於是乎,就想到了怎麼給http請求時間限制搞大一點。 。 。 。 。 。查看PHP手冊,果實真有個參數
“ timeout ”,預設不知道多大,當把它的值設大一點,問題得已解決,弱弱地做個筆記~~~
Socket版本:
| 04
| * $post_string = "app=socket&version=beta";
05
* request_by_socket('blog .snsgou.com', '/restServer.php', $post_string);
|
|
06
,
$ post_string
,$port | = 80,
$timeout = 30) {
= 30) {
$socket = fsockopen ( $remote_server |
,
$port,
$errno
,
$errstr |
, $timeout );
if (! $socket )
die ( "$errstr($errno)" );
|
fwrite($socket
,
"POST $remote_path HTTP/1.0" ); |
$socket ,
"User-Agent: Socket Example" );
|
$socket
,
"HOST: $remote_server" |
);
$socket
| ,
"Content-type: application/x-www-form-urlencoded"
);
| fwrite(
$socket ,
"Content-length: " . ( strlen (
| $post_string
) + 8) .
""
);
|
15com ,
"Accept:*/*" );
|
17
,
"mypost=$post_string" |
);
$socket ,
"" );
|
19 ""
;
|
20 |
while ( $插座 ,4096))){
|
21
=""
25
$data
.= fgets |
( $socket , 4096);
2 } |
Curl版本:
07
函數 |
request_by_curl( $remote_server ,
$post_string ) { |
09
curl_setopt(
$ch
, CURLOPT_URL,
$remote_server |
);
|
108 $ch 、CURLOPT_POSTFIELDS、
|
'mypost=' 。 $post_string |
);
|
11 ch ,CURLOPT_RETURNTRANSFER,true);
|
12 |
curl_setopt(
| $ch
, CURLOPT_USERAGENT,
$ch, CURLOPT_USERAGENT,
"snsgou.com 的CURL 範例測試版"
);
|
|
=curl= _exec(
$ch );
Curl 版本( 2)
* @param string $url 請求地址
* @param string $method 請求方式GET/POST
|
* @param string $refererUrl 請求來源位址
|
08
* @param string $contentType
|
|
09
* @param string $proxy
|
|
11
* @return
| * @return
* @return |
* @return
13 |
function send_request(
| $url
,
$data
, $refererUrl= | ''
, $method
$contentType = 'application/json' ,
$timeout = 30, $proxy = false) {
$ch = null;
15
|
if
(
$ch
|
17
curl_setopt( $ch , CURLOPT_POST, 1);
|
18
$ch
, CURLOPT_HEADER,0 );
|
19
|
curl_setopt($ch
|
20
ch , CURLOPT_RETURNTRANSFER, 1); |
( $ch |
, CURLOPT_FORBID_REUSE, 1);
|
22
curl_setopt( $ch |
curl_setopt( $ch , CURPT_TIME
$timeout ); |
24
curl_setopt( |
$ch , CURLOPT_ER, CURLOPT_ER,
$refererUrl );
|
27 |
curl_setoptopv.
數組 ( 'Content-Type:' . $contentType ));
|
}
( )){
|
30
curl_setopt( $ch , CURLOPT_POSTFIELDS,
|
$資料
);
32
curl_setopt( $ch |
, CURLOPT_POSTFIELDS, http_30_query();
33 |
}
|
34
} == '否則請問如果如果取得真toupper |
(
$方法)) {
$資料
)){
|
36
$real_url = $url$real_url = $url $real_url。 ( |
strpos
($url
,
'? ' ) === 假? |
'? ' : '' )。
$資料 ;
|
{
|
38
38
$real_url = $url 。 ( strpos ( $url ,
|
'? '
)===假? '? '
:
'' )。 http_build_query( |
$data );
|
|
40
41
$ch _$
42
|
curl_setoptopt(url
$ch
, CURLOPT_HEADER, 0);
|
curl_setopt( $ch |
,CURLOPT_HTTPHEADER,
數組(
'Content-Type:'
. $contentType |
)); |
curl_setopt($ ch, CURLOPT_RETURNTRANSFER, 1); |
( $ch
| ,CURLOPT_TIMEOUT,
$逾時
);
}
回假;
53
5 5
curl_setopt( |
$ch , CURLOPT_PROXY,
$代理 );
|
|
57
$ret =curl_exec( $ch |
);
60
'httpInfo'
|
=> 。 '發送' => $資料 , |
70
} | 70
} restRequest($r_url,' POST', json_encode( $data)); |
以上就介紹了php實作post和get,包含了面向的內容,希望對PHP教學有興趣的朋友得到幫助。