PHP中实现请求转发(curl)和请求重定向

转载 2013年12月11日 15:36:53

一.请求重定向

1用HTTP头信息

也就是用PHP的HEADER函数。PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型("Context-type: xxx/xxx"),页面的属性("No cache", "Expire")等等。

用HTTP头信息进行PHP重定向到另外一个页面的方法如下:

  1. <?php 
  2. $url = "www.baidu.com";  
  3. if (!empty($url))    
  4. {    
  5.     Header("HTTP/1.1 303 See Other"); //这条语句可以不写  
  6.     Header("Location: $url");  
  7. }    
  8. ?>    

注意一下,"Localtion:"后面有一个空格。

2、用HTML标记PHP重定向 

用HTML标记,就是用META的REFRESH标记,举例如下:

  1. <?php 
  2. if (!empty($url))  
  3. {  
  4.     echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=$url\">";  
  5. }  
  6. ?> 

3、用脚本来实现PHP重定向

举例如下:

  1. <? 
  2. if (isset($url))  
  3. {  
  4.     echo "<SCRIPT LANGUAGE="JavaScript">";  
  5.     echo "location.href='$url'";  
  6.     echo "</SCRIPT>";  
  7. }  
  8. ?> 
或者

  1. <?php echo "<script>window.location =\"$url\";</script>";?> 

二.请求转发

PHP使用curl来进行请求转发

1.给PHP安装和开启curl

一、window下安装php_curl支持

  1.将PHP安装文件夹下的三个文件php_curl.dll(可能在ext文件夹中),libeay32.dll,ssleay32.dll 复制到 %windir%/system32下;
  2.打开php.ini(可能在PHP环境的安装目录下,默认在c:\WINDOWS目录下),将;extension=php_curl.dll头部的分号去掉;
  3.重启php的服务(apache或者IIS),如重启IIS,运行iisreset即可。

二、linux中php如何安装curl扩展

  如果php已经在系统编译好,后来又需要添加新的扩展,一种方式就是重新完全编译php,另一种方式就是单独编译扩展库,以extension的形式扩展。

情况一:全新安装php 和curl

  首先下载curl安装包(我的php是4.4.4的,下载最新的curl 7.16 不能使用,最后下载7.14的才可以,下载要注意一下版本)

然后安装cURL

# tar -zxf (此处填下载的curl包名称)
# ./configure –prefix=/usr/local/curl
# make; make install

安装php时,只要打开开关 –with-curl=/usr/local/curl就可以了。

  php要求curl的目录要有include和lib目录,并且include下要有easy.h和curl.h两个文件,lib下要有libcurl.a。经编译后include下的文件有了,但是lib目录下可能还没有。原来生成到lib/.libs目录下,所以要copy到lib目录。

情况二:已经安装了php,现在需要添加这个扩展

进入安装原php的源码目录,(如果删了,但是还有原来的压缩文件的话,重新解压就行)

cd ext/curl
phpize  ./configure –with-curl=DIR   (可以不写dir,如果你的curl安装时没有指定目录)
make

就会在PHPDIR/ext/curl/moudles/下生成curl.so的文件。
复制curl.so文件到extensions的配置目录,修改php.ini就好了

以上两种就是Linux下php扩展cURL的安装方法。

2.cURL实现Get和Post请求的方法      相关实现方法的文章链接:脚本之家

但仔细发现,用curl实现的请求转发和用JSP里的request.getrequestdispatcher请求转发不一样

例如:

a.php里实现了curl请求,实际上是a.php页面向其他页面请求,然后把响应内容输出在a.php页面里,调用完curl后,a.php还能再做别的事情

但JSP不同,jsp中实现请求转发后,例如:a.jsp请求转向到b.jsp,那么就会停止执行当前的a.jsp,转而执行被转发的资源b.jsp

相同的是a.php与a.jsp上的URL都不变化

php curl请求转发

  • cuiweijie3
  • cuiweijie3
  • 2013年08月20日 16:40
  • 6066

用PHP做服务器转发层,解决js的ajax跨域访问问题

做js的ajax应用时,会遇到你需要请求的接口并不在你当前域下,此时就会出现跨域访问的问题,浏览器会禁止你请求这个接口。 此时怎么访问这个WebService的接口呢? 一个简单的办法就是在本域的...
  • hzbigdog
  • hzbigdog
  • 2012年11月21日 12:48
  • 9072

关于请求转发和重定向(一)--- 请求转发

在servlet中可能会牵扯到传值或者跳转的问题,
  • u011832252
  • u011832252
  • 2014年05月17日 22:16
  • 995

使用PHP模拟post提交数据

这也是个老生常谈的话题了,上午花了点时间把这个问题整理了一下。 一般来说用PHP来模拟post提交数据有三种方法,file_get_contents、curl和socket。 写了个公用函数,专门...
  • caiknife
  • caiknife
  • 2013年04月13日 12:03
  • 34563

PHP中采用POST方式发送数据

最近两天项目需要,由于服务器正在开发,客户端进度稍快一些,没有服务器进行联调。因此我重操旧业,用PHP快速的写了一些web页面,算是当测试桩程序了,七八个web接口,基本上5到6个小时搞定了。由于当前...
  • xingtian713
  • xingtian713
  • 2009年09月08日 22:33
  • 62935

PHP设置网址转发

每种方法都不一样; 1、header跳转: 此法要注意,在发送改代码前,不可以有任何输出到客户端的浏览器,也就是不可以有html里面的任何代码,或者在PHP里面不可以有任何打印输出(如echo和pri...
  • oldinaction
  • oldinaction
  • 2014年10月08日 13:46
  • 1165

php代码20个实用技巧 ------ 转发自菜鸟教程

1.不要实用相对路径 常常会看到:  1 require_once('../../lib/some_class.php');  该方法有很多缺点:它首先查找指定的php包含路径,然后...
  • m0_37412958
  • m0_37412958
  • 2017年08月19日 15:01
  • 182

用PHP做服务器转发层,解决js的ajax跨域访问问题

做js的ajax应用时,会遇到你需要请求的接口并不在你当前域下,此时就会出现跨域访问的问题,浏览器会禁止你请求这个接口。 此时怎么访问这个WebService的接口呢? 一个简单的办法就是...
  • u013179809
  • u013179809
  • 2015年09月24日 16:23
  • 416

curl抓取页面时遇到重定向的解决方法

用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下:
  • qmhball
  • qmhball
  • 2012年09月03日 13:29
  • 33013

php curl 请求302跳转页面

若请求url已改变且设置了自动跳转,可通过设置 CURLOPT_FOLLOWLOCATION 参数实现自动请求跳转链接。若要手动判断是否跳转,可通过 curl_getinfo($ch) 方法获取具...
  • u013372487
  • u013372487
  • 2016年07月19日 11:51
  • 3216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中实现请求转发(curl)和请求重定向
举报原因:
原因补充:

(最多只允许输入30个字)