php实现post和get
来源:互联网 发布:淘宝网改地址 编辑:程序博客网 时间:2024/06/06 00:05
file_get_contents版本:
01
<?php
02
/**
03
* 发送post请求
04
* @param string $url 请求地址
05
* @param array $post_data post键值对数据
06
* @return string
07
*/
08
function
send_post(
$url
,
$post_data
) {
09
10
$postdata
= http_build_query(
$post_data
);
11
$options
=
array
(
12
'http'
=>
array
(
13
'method'
=>
'POST'
,
14
'header'
=>
'Content-type:application/x-www-form-urlencoded'
,
15
'content'
=>
$postdata
,
16
'timeout'
=> 15 * 60
// 超时时间(单位:s)
17
)
18
);
19
$context
= stream_context_create(
$options
);
20
$result
=
file_get_contents
(
$url
, false,
$context
);
21
22
return
$result
;
23
}
使用如下:
1
$post_data
=
array
(
2
'username'
=>
'stclair2201'
,
3
'password'
=>
'handan'
4
);
5
send_post(
'http://blog.snsgou.com'
,
$post_data
);
实战经验:
当我利用上述代码给另一台服务器发送http请求时,发现,如果服务器处理请求时间过长,本地的PHP会中断请求,即所谓的超时中断,第一个怀疑的是PHP本身执行时间的超过限制,但想想也不应该,因为老早就按照这篇文章设置了“PHP执行时间限制”(【推荐】PHP上传文件大小限制大全 ),仔细琢磨,想想,应该是http请求本身的一个时间限制,于是乎,就想到了怎么给http请求时间限制搞大一点。。。。。。查看PHP手册,果真有个参数 “ timeout ”,默认不知道多大,当把它的值设大一点,问题得已解决,弱弱地做个笔记~~~
Socket版本:
01
/**
02
* Socket版本
03
* 使用方法:
04
* $post_string = "app=socket&version=beta";
05
* request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
06
*/
07
function
request_by_socket(
$remote_server
,
$remote_path
,
$post_string
,
$port
= 80,
$timeout
= 30) {
08
$socket
=
fsockopen
(
$remote_server
,
$port
,
$errno
,
$errstr
,
$timeout
);
09
if
(!
$socket
)
die
(
"$errstr($errno)"
);
10
fwrite(
$socket
,
"POST $remote_path HTTP/1.0"
);
11
fwrite(
$socket
,
"User-Agent: Socket Example"
);
12
fwrite(
$socket
,
"HOST: $remote_server"
);
13
fwrite(
$socket
,
"Content-type: application/x-www-form-urlencoded"
);
14
fwrite(
$socket
,
"Content-length: "
. (
strlen
(
$post_string
) + 8) .
""
);
15
fwrite(
$socket
,
"Accept:*/*"
);
16
fwrite(
$socket
,
""
);
17
fwrite(
$socket
,
"mypost=$post_string"
);
18
fwrite(
$socket
,
""
);
19
$header
=
""
;
20
while
(
$str
= trim(
fgets
(
$socket
, 4096))) {
21
$header
.=
$str
;
22
}
23
24
$data
=
""
;
25
while
(!
feof
(
$socket
)) {
26
$data
.=
fgets
(
$socket
, 4096);
27
}
28
29
return
$data
;
30
}
Curl版本:
01
/**
02
* Curl版本
03
* 使用方法:
04
* $post_string = "app=request&version=beta";
05
* request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);
06
*/
07
function
request_by_curl(
$remote_server
,
$post_string
) {
08
$ch
= curl_init();
09
curl_setopt(
$ch
, CURLOPT_URL,
$remote_server
);
10
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
'mypost='
.
$post_string
);
11
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, true);
12
curl_setopt(
$ch
, CURLOPT_USERAGENT,
"snsgou.com's CURL Example beta"
);
13
$data
= curl_exec(
$ch
);
14
curl_close(
$ch
);
15
16
return
$data
;
17
}
Curl版本(2)
01
/**
02
* 发送HTTP请求
03
*
04
* @param string $url 请求地址
05
* @param string $method 请求方式 GET/POST
06
* @param string $refererUrl 请求来源地址
07
* @param array $data 发送数据
08
* @param string $contentType
09
* @param string $timeout
10
* @param string $proxy
11
* @return boolean
12
*/
13
function
send_request(
$url
,
$data
,
$refererUrl
=
''
,
$method
=
'GET'
,
$contentType
=
'application/json'
,
$timeout
= 30,
$proxy
= false) {
14
$ch
= null;
15
if
(
'POST'
===
strtoupper
(
$method
)) {
16
$ch
= curl_init(
$url
);
17
curl_setopt(
$ch
, CURLOPT_POST, 1);
18
curl_setopt(
$ch
, CURLOPT_HEADER,0 );
19
curl_setopt(
$ch
, CURLOPT_FRESH_CONNECT, 1);
20
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
21
curl_setopt(
$ch
, CURLOPT_FORBID_REUSE, 1);
22
curl_setopt(
$ch
, CURLOPT_TIMEOUT,
$timeout
);
23
if
(
$refererUrl
) {
24
curl_setopt(
$ch
, CURLOPT_REFERER,
$refererUrl
);
25
}
26
if
(
$contentType
) {
27
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
array
(
'Content-Type:'
.
$contentType
));
28
}
29
if
(
is_string
(
$data
)){
30
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$data
);
31
}
else
{
32
curl_setopt(
$ch
, CURLOPT_POSTFIELDS, http_build_query(
$data
));
33
}
34
}
else
if
(
'GET'
===
strtoupper
(
$method
)) {
35
if
(
is_string
(
$data
)) {
36
$real_url
=
$url
. (
strpos
(
$url
,
'?'
) === false ?
'?'
:
''
).
$data
;
37
}
else
{
38
$real_url
=
$url
. (
strpos
(
$url
,
'?'
) === false ?
'?'
:
''
). http_build_query(
$data
);
39
}
40
41
$ch
= curl_init(
$real_url
);
42
curl_setopt(
$ch
, CURLOPT_HEADER, 0);
43
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
array
(
'Content-Type:'
.
$contentType
));
44
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
45
curl_setopt(
$ch
, CURLOPT_TIMEOUT,
$timeout
);
46
if
(
$refererUrl
) {
47
curl_setopt(
$ch
, CURLOPT_REFERER,
$refererUrl
);
48
}
49
}
else
{
50
$args
= func_get_args();
51
return
false;
52
}
53
54
if
(
$proxy
) {
55
curl_setopt(
$ch
, CURLOPT_PROXY,
$proxy
);
56
}
57
$ret
= curl_exec(
$ch
);
58
$info
= curl_getinfo(
$ch
);
59
$contents
=
array
(
60
'httpInfo'
=>
array
(
61
'send'
=>
$data
,
62
'url'
=>
$url
,
63
'ret'
=>
$ret
,
64
'http'
=>
$info
,
65
)
66
);
67
68
curl_close(
$ch
);
69
return
$ret
;
70
}
调用 WCF接口 的一个例子:$json = restRequest($r_url,'POST', json_encode($data));
0 0
- php实现post和get
- php的curl实现get和post
- php的curl实现get和post
- php的curl实现get和post
- PHP curl实现get,post和cookie
- 实现支持post和get的PHP函数
- PHP的curl实现get,post 和 cookie
- php curl实现get和post的代码
- 【PHP】cURL实现get,post 和 cookie(几个实例)
- PHP中使用CURL实现GET和POST请求
- PHP中使用CURL实现GET和POST请求
- php通过curl实现的POST和GET请求
- PHP中使用CURL实现GET和POST请求(详细)
- PHP中使用CURL实现GET和POST请求
- PHP中使用CURL实现GET和POST请求
- PHP中使用CURL实现GET和POST请求
- PHP中使用CURL实现GET和POST请求
- PHP使用CURL实现POST和GET请求详解
- Uva 1585 score
- github开源php项目
- PHP中可以静态调用非静态方法么?(诡异的调用)
- 【小熊刷题】Convert Sorted List to Balanced Binary Search Tree<可再复习>
- MySQL-python “error: command 'gcc' failed with exit status 1”错误
- php实现post和get
- RPG黑暗之光(4)添加第一个NPC、NGUI实现任务发布
- RPG黑暗之光(5)NGUI实现背包系统初步
- php中static和const
- php中的clone对象
- php中的接口和抽象类
- php对象的序列化(串行化)用作 写入文件或者网络传输
- Unity Game Programming AI(1)人工智能导论
- Rotate Image