以下是源码:源码本身输出是正常的。但这http://API地址用以下输出代码输出的是网络了不能用需要本地IP或直接缓存获取才能用。简单点说就是要先执行地址在获取本地网络输出内的变量数据才能用。不知道怎么写麻烦帮帮忙。<?php
header('Content-Type:text/html;charset=UTF-8');
if(empty($_REQUEST['sort'])) die;
$sort=$_REQUEST['sort'];
$json=curl_tGet('http://api.对不起这里真实地址我去掉了get_list?AccountGUID=c50d1a6c-6455-11e6-9d25-0016363b8a8f&AccountChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&SessionID=cd909f11c7030a72bc68ac886f507bb6&ChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&ChannelClassGUID=c7270725-adb4-11e3-b3a3-56b55c4f22cc');
$objt=json_decode($json,true);
$channelList=$objt['ChannelList'];
foreach($channelList as $channel){
if($channel['Sort']==$sort){
header("Location: ".$channel['Media'][0]['Url']);
}
}function curl_tGet($url){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl,CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
$src = curl_exec($curl);
curl_close($curl);
return $src;
}
header('Content-Type:text/html;charset=UTF-8');
if(empty($_REQUEST['sort'])) die;
$sort=$_REQUEST['sort'];
$json=curl_tGet('http://api.对不起这里真实地址我去掉了get_list?AccountGUID=c50d1a6c-6455-11e6-9d25-0016363b8a8f&AccountChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&SessionID=cd909f11c7030a72bc68ac886f507bb6&ChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&ChannelClassGUID=c7270725-adb4-11e3-b3a3-56b55c4f22cc');
$objt=json_decode($json,true);
$channelList=$objt['ChannelList'];
foreach($channelList as $channel){
if($channel['Sort']==$sort){
header("Location: ".$channel['Media'][0]['Url']);
}
}function curl_tGet($url){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl,CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
$src = curl_exec($curl);
curl_close($curl);
return $src;
}
我说的是这个代码输出来的API变量地址是不能用的。
这个代码是为了抓取http://API里面的一个动态变量地址,然后变量输出的
本地直接网页打开http://API地址直接复制里面的变量地址是可以的,每一次刷新变量地址多会不一样但本地刷新抓取的却可以用
所有应该是需要读取本地IP才能用用个思路来说就是要先执行http://API地址后再抓取里面的变量动态地址(也可以说是读取缓存)再执行输出所有我认为这代码应该是底下的输出代码直接跳转网络输出而没有经过本地加载后输出
网页显示的输出,会自动转码,而实际的内容,却不是你网页输出上看到的内容。。也就是$channel['Media'][0]['Url']返回的原始值,不是一个合法的url地址。。
所以你在本机的ip是可以访问的,但放上去服务器,因为IP不是对方的白名单,所以被屏蔽跳转到其他页面了。
如果是,那么就是服务器被限制了,需要做的是curl里面增加代理。如果本地执行,和服务器执行,效果一样,都不对,那么就是代码问题。你需要一步一步调试,把获取到的内容直接存到文本里。浏览器访问,查看网站源码,再和你抓取的对比,看看是否一样。如果不一样,那就用curl模拟浏览器请求,把该加的header都加进去,比如refer、UA之类的。
通过服务器PHP代理(也就是以上的代码)获取的获取的数据不能用,
PHP所代理的主要是个动态直播地址
本地浏览器输入地址获取的数据播放格式是M3U8的URL输出主要获取的是以下这段内容
http:\/\地址\/playlist.m3u8?a=57cea8bb&b=7fh3ac16mdwORQqc1GAOsA
从a=57cea8bb&b=7fh3ac16mdwORQqc1GAOsA这段是动态的。本地浏览器获取的可以用。通过PHP抓取代码挂在服务器上再本地输出却不能用。很明显改地址需要本地加载或者说是缓存再读取就能用,而通过网络获取的就像楼上说的“返回的原始值,不是一个合法的url地址”PHP文件用var_dump把$channel['Media'][0]['Url']的值输出地址是正确的只是后面动态不一样
这里顺便说一下PHP文件输出如果修改使用CKplayer这款网页播放器M3U8插件输出是可以正常播放的
个人觉得就出在curl输出问题,但就是不知道怎么写和修改。琢磨了好几天一点进展也没有。求高手帮助。
header('Content-Type:text/html;charset=UTF-8');
if(empty($_REQUEST['sort'])) die;
$sort=$_REQUEST['sort'];
$json=curl_tGet('http://api.ottclub.info/api/get_list?AccountGUID=c50d1a6c-6455-11e6-9d25-0016363b8a8f&AccountChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&SessionID=cd909f11c7030a72bc68ac886f507bb6&ChannelCategoryGUID=596ad53e-adaf-11e3-b3a3-56b55c4f22cc&ChannelClassGUID=c7270725-adb4-11e3-b3a3-56b55c4f22cc');
$objt=json_decode($json,true);
$channelList=$objt['ChannelList'];
foreach($channelList as $channel){
if($channel['Sort']==$sort){
header("Location: ".$channel['Media'][0]['Url']);
}
}function curl_tGet($url){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl,CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
$src = curl_exec($curl);
curl_close($curl);
return $src;
}
print_r(get_headers($url));Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Wed, 07 Sep 2016 01:28:44 GMT
[2] => Server: Apache
[3] => X-Powered-By: PHP/5.3.3
[4] => Set-Cookie: ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%2222bffd260ff1e81e754f42a624a48c37%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A13%3A%22117.70.160.14%22%3Bs%3A10%3A%22user_agent%22%3Bb%3A0%3Bs%3A13%3A%22last_activity%22%3Bi%3A1473211724%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D5c6008f7c4b1c6569cd160aada03c267; expires=Wed, 07-Sep-2016 03:28:44 GMT; path=/
[5] => Connection: close
[6] => Content-Type: text/html; charset=UTF-8
)你没有考虑这个因素会给后续的操作带来的影响