php curl跨域cookie_PHP使用curl模拟浏览器解决跨域问题

在Ajax应用中,请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何问题的,如果请求外部资源,那么这就称为跨域请求。由于浏览器同源策略(同源策略, 同源策略防止跨域是浏览器中的安全机制),凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。跨域请求虽然返回200,但是不会返回任何数据。

解决跨域问题有很多方法,例如,在服务端填上响应头:

header('content-type:application:json;charset=utf8');

header('Access-Control-Allow-Origin:*'); /*星号表示所有的域都可以接受,*/

header('Access-Control-Allow-Methods:GET,POST');

header('Access-Control-Allow-Headers:x-requested-with,content-type');

用jsonp的方法。等等。

(网上方法我没有一一测试验证过,我这边讲的是我使用过的一种方法。)

使用curl

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。

使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤:

1. 初始化连接句柄;

curl_init()

2. 设置CURL选项;

curl_setopt()

(较为重要,一切玄妙均在此。有一长串cURL参数可供设置,它们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。)

3.执行并获取结果

curl_exec()

4.释放cURL句柄

curl_close()

使用CURL发送GET请求

发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。具体代码如下:

$curl = curl_init(); //初始化

curl_setopt($curl, CURLOPT_URL, 'http://www.111.com/receive.php'); //设置抓取的url

curl_setopt($curl, CURLOPT_HEADER, 1); //设置头文件的信息作为数据流输出

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。

$data = curl_exec($curl); //执行命令

echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //输出请求状态码

curl_close($curl);//关闭URL请求

print_r($data);//显示获得的数据

使用CURL发送POST请求

可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。

$curl = curl_init();//初始化

url curl_setopt($curl, CURLOPT_URL, 'http://www.111.com/receive.php');//设置抓取的

curl_setopt($curl, CURLOPT_HEADER, 1);//设置头文件的信息作为数据流输出

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。

curl_setopt($curl, CURLOPT_POST, 1); //设置post方式提交

$post_data = array( "title" => "1290800466", "content" => "3424243243" );//设置post数据

curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);//post提交的数据

$data = curl_exec($curl); //执行命令

curl_close($curl); //关闭URL请求

print_r($data);//显示获得的数据

分享到:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值