首页 > 后端开发 > php教程 > PHP实现curl或file_get_contents 获取需要授权页面的方法

PHP实现curl或file_get_contents 获取需要授权页面的方法

墨辰丷
发布: 2023-03-27 14:12:02
原创
1726 人浏览过

本篇文章主要介绍PHP实现curl或file_get_contents 获取需要授权页面的方法,感兴趣的朋友参考下,希望对大家有所帮助。

例如要获取的页面:http://localhost/server.php

1

2

3

4

5

<?php

$content = isset($_POST[&#39;content&#39;])? $_POST[&#39;content&#39;] : &#39;&#39;;

header(&#39;content-type:application/json&#39;);

echo json_encode(array(&#39;content&#39;=>$content));

?>

登录后复制

使用curl获取server.php页面

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

$url = &#39;http://localhost/server.php&#39;;

$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$ret = curl_exec($ch);

$retinfo = curl_getinfo($ch);

curl_close($ch);

if($retinfo[&#39;http_code&#39;]==200){

 $data = json_decode($ret, true);

 print_r($data);

}else{

 echo &#39;POST Fail&#39;;

}

?>

登录后复制

如果服务没有安装php curl扩展,使用file_get_contents也可以实现发起请求,获取页面返回数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?php

$url = &#39;http://localhost/server.php&#39;;

$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;);

 

$opt = array(

 &#39;http&#39; => array(

  &#39;method&#39; => &#39;POST&#39;,

  &#39;header&#39; => &#39;content-type:application/x-www-form-urlencoded&#39;,

  &#39;content&#39; => http_build_query($param)

 )

);

 

$context = stream_context_create($opt);

 

$ret = file_get_contents($url, false, $context);

 

if($ret){

 $data = json_decode($ret, true);

 print_r($data);

}else{

 echo &#39;POST Fail&#39;;

}

?>

登录后复制

使用curl 和 file_get_contents 返回的结果都是一样的。

1

2

3

4

Array

(

 [content] => fdipzone blog

)

登录后复制

对于需要授权的页面,例如使用了htpasswd+.htaccess设置目录访问权限的页面,直接用上面的方法会返回401 Unauthorized错误。

这次的例子先不使用htpasswd+.htaccess来控制访问权限,而使用 $_SERVER['PHP_AUTH_USER'] $_SERVER['PHP_AUTH_PW']这两个服务器参数。

http://localhost/server.php 修改为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

if(!isset($_SERVER[&#39;PHP_AUTH_USER&#39;]))

{

 header(&#39;WWW-Authenticate: Basic realm="localhost"&#39;);

 header("HTTP/1.0 401 Unauthorized");

 exit;

}else{

 if (($_SERVER[&#39;PHP_AUTH_USER&#39;]!= "fdipzone" || $_SERVER[&#39;PHP_AUTH_PW&#39;]!="654321")) {

  header(&#39;WWW-Authenticate: Basic realm="localhost"&#39;);

  header("HTTP/1.0 401 Unauthorized");

  exit;

 }

}

$content = isset($_POST[&#39;content&#39;])? $_POST[&#39;content&#39;] : &#39;&#39;;

header(&#39;content-type:application/json&#39;);

echo json_encode(array(&#39;content&#39;=>$content));

?>

登录后复制

设定帐号:fdipzone 密码:654321

curl中,有一个参数是 CURLOPT_USERPWD,我们可以利用这个参数把帐号密码在请求时发送过去。

curl_setopt($ch, CURLOPT_USERPWD, &#39;帐号:密码&#39;);

curl请求的程序修改为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

$url = &#39;http://localhost/server.php&#39;;

$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;);

 

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_USERPWD, &#39;fdipzone:654321&#39;); // 加入这句

$ret = curl_exec($ch);

$retinfo = curl_getinfo($ch);

curl_close($ch);

if($retinfo[&#39;http_code&#39;]==200){

 $data = json_decode($ret, true);

 print_r($data);

}else{

 echo &#39;POST Fail&#39;;

}

?>

登录后复制

而file_get_contents 如果要发送帐号和密码,需要手动拼接header

file_get_contents 请求的程序修改为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

$url = &#39;http://localhost/server.php&#39;;

$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;);

 

$auth = sprintf(&#39;Authorization: Basic %s&#39;, base64_encode(&#39;fdipzone:654321&#39;)); // 加入这句

 

$opt = array(

 &#39;http&#39; => array(

  &#39;method&#39; => &#39;POST&#39;,

  &#39;header&#39; => "content-type:application/x-www-form-urlencoded\r\n".$auth."\r\n", // 把$auth加入到header

  &#39;content&#39; => http_build_query($param)

 )

);

 

$context = stream_context_create($opt);

 

$ret = file_get_contents($url, false, $context);

 

if($ret){

 $data = json_decode($ret, true);

 print_r($data);

}else{

 echo &#39;POST Fail&#39;;

}

?>

登录后复制

相关推荐:

PHP中file_put_contents函数详解

PHP使用file_get_contents发送http请求步骤详解

file_get_contents函数介绍与使用方法详解

以上是PHP实现curl或file_get_contents 获取需要授权页面的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板