PHP发送HTTP请求(POST请求、GET请求)
来源:互联网 发布:java包如何使用 编辑:程序博客网 时间:2024/04/27 12:03
file_get_contents版本:
01
/**
02
* 发送post请求
03
* @param string $url 请求地址
04
* @param array $post_data post键值对数据
05
* @return string
06
*/
07
function
send_post(
$url
,
$post_data
) {
08
09
$postdata
= http_build_query(
$post_data
);
10
$options
=
array
(
11
'http'
=>;
array
(
12
'method'
=>;
'POST'
,
13
'header'
=>;
'Content-type:application/x-www-form-urlencoded'
,
14
'content'
=>;
$postdata
,
15
'timeout'
=>; 15 * 60
// 超时时间(单位:s)
16
)
17
);
18
$context
= stream_context_create(
$options
);
19
$result
=
file_get_contents
(
$url
, false,
$context
);
20
21
return
$result
;
22
}
使用如下:
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));
转自http://blog.snsgou.com/blog/161.html
0 0
- PHP发送HTTP请求(POST请求、GET请求)
- (推荐)怎么用PHP发送HTTP请求(POST请求、GET请求)?
- JAVA 发送Http请求,GET、POST请求
- HTTP 发送get post请求
- http发送get、post请求
- Http发送GET/POST请求
- php 发送get,post 请求
- php http post get 请求
- php 发送http post请求
- Node.js中http 接收get请求、接收post请求、发送get请求、发送post请求
- php http发送get、post请求的几种方法
- PHP Socket实现HTTP GET POST请求发送
- java发送HTTP GET POST请求
- 发送Http请求(POST GET)的方法
- javascript发送get、post http请求
- java发送get、post http请求
- Android 发送请求 HTTP GET/POST
- 发送Http请求(POST GET)的方法
- 【张孝祥并发课程笔记】15:java5同步集合类的应用
- MyEclipse 6.0 反编译插件jad安装
- eclipse 和 google拼音输入法冲突问题
- 百度员工离职总结:如何做个好员工?
- 数据行列转置函数
- PHP发送HTTP请求(POST请求、GET请求)
- Building JavaScript Games for Phones Tablets and Desktop(2)-游戏编程基础
- DirectUI开源库 - DuiLib 的使用
- Spring之依赖配置详解
- 解决Android中“Android SDK Content loader has encountered a problem” “parseSdkContent Failed ”错误
- C#中利用WebBrowser控件,获得HTML源码
- Android 共享全局数据
- java 内部类
- Windows Server 2003下SYN Flood攻击防御的一种方法