uku / Unblock-Youku

A Chrome extension helping users access their web services while traveling outside mainland China
https://uku.im
GNU Affero General Public License v3.0
3.18k stars 651 forks source link

用proxy.uku.im:80做http 代理无效。 #159

Closed zhumingvictor closed 11 years ago

zhumingvictor commented 11 years ago

您好我尝试用proxy.uku.im:80直接作为http代理,但是ipservice.163.com/isFromMainland总是显示false。请问是什么原因?

karlcheong commented 11 years ago

@zhumingvictor ipservice.163.com/isFromMainland 显示 false 就是沒有成功套用代理 請參考 http://ub.uku.im/proxy 說明設置

還有, 請不要直接拿服務器做代理, 因為它只會代理unblock需要的url, 其他請求會拒絕掉

zhuzhuor commented 11 years ago

不能直接用 proxy.uku 做代理,还请你仔细阅读 http://uku.im/proxy 显示 false 说明代理没有设置成功

另外给 wifi 设置代理,只能在使用这个 wifi 网络的时候起作用,比如换了 wifi 网络或者用 3g/4g 网络就不会起效

zhuzhuor commented 11 years ago

@karlcheong orz 和你同时回复了

@zhumingvictor 另外想到浏览器可能有缓存,每次测试的时候可以多刷新下那个显示 false 的网页,看看有没有改变

zhumingvictor commented 11 years ago

怎么试都没有用,我用java连也不行。试过整个JVM 设置“http.proxyHost“不行,用httpurlconnection.openconnection(proxy)也不行。不知道什么原因。用xn--yuk-6na13b.com redirect有时候返回500,现在用http://berryphp.ap01.aws.af.cm/digito.php 似乎一直可用。

karlcheong commented 11 years ago

你能說一下你在什么平台和想要做什么嗎? 這里應該沒有java的事

zhumingvictor commented 11 years ago

Android 通过您的代理读 yk api.

karlcheong commented 11 years ago

在android的話因為它不支援pac, 所以請參考 http://ub.uku.im/dns DNS 反向代理 unblock法

zhumingvictor commented 11 years ago

我是android开发code里面开http url connection 通过您的proxy读yk api.用redirect还是可以的。

zhuzhuor commented 11 years ago

@zhumingvictor 能详细说说你的 android app 吗?工作的流程以及目标是? 我们的代理服务器限制了访问的 URL,要么你用 @karlcheong 的那个 DNS 服务器,要么得用那个 PAC 文件 或者你自己本地假设一个那个 nodejs 代理服务器,步骤在那个页面也有介绍

PS,redirect 服务器最近的确偶尔 500 error,我也发现了 之前刚要仔细检查的时候发现又不抽风了,估计是一阵一阵的 回头再仔细研究下吧

zhumingvictor commented 11 years ago

我是通过视频的id 从api 拿到视频信息。不知道什么原因用浏览器直接访问api地址得到的json没有问题。但是用你们的http代理始终是没有通过代理的效果。 就算是测试ipservice.163.com/isFromMainland,也永远是false。很奇怪。我浏览器测试http proxy用的是switchsharp插件。

zhuzhuor commented 11 years ago

还是没看明白 你浏览器测试的时候用的是 PAC 文件还是直接的 HTTP 代理? 你Android app测试的时候用的是 PAC 文件还是直接的 HTTP 代理? 我不清楚 Android app 是不是不能用 PAC 文件啊,如果不行的话推荐你假设个本地服务器或者看看 @karlcheong 之前的给Android设置的教程吧

zhumingvictor commented 11 years ago

浏览器+unblock you=true 浏览器+http proxy=false java+http proxy=false

zhumingvictor commented 11 years ago

没关系,我只是实验一下。redirect 还是可以的。谢谢您的回复。

zhuzhuor commented 11 years ago

@zhumingvictor 我记得 chrome 会检测代理服务器的联通状况,如果有问题会 fallback 到系统代理 你可以在 chrome://net-internals/#proxy 检查代理是不是生效的 如果只用 http proxy,因为大部分的页面都不能通过代理,所以才会 fallback 到系统代理,所以才会显示 false Android app 估计也有同样的 fallback 机制吧

zhumingvictor commented 11 years ago

可能吧。

zhuzhuor commented 11 years ago

@zhumingvictor 另外能说说你写的 android app 吗? redirect mode 现在是我自己付钱的 SAE 上面的 app,所以还是想知道下你的大概的用法和用量

karlcheong commented 11 years ago

@zhuzhuor 我提供的那個是通過192.241.222.103 nodejs的.. 感覺要是付錢給SAE還倒不如去買個國內VPS...

zhuzhuor commented 11 years ago

@karlcheong 回头再看看有没有替代方案吧,国内的 VPS 很多都比较坑爹,出了问题联系客服没人理什么的 用 SAE 主要是图省事啊,不用整天盯着服务器,死机了就需要手动重启什么的...

zhumingvictor commented 11 years ago

我就是写个app拦截android浏览器youku的点击,然后拿到视频播放地址。我只打算家里用,装在android播放器上。如果有朋友用人多的话我会弄个自己的vps的。你的服务器是按流量计费的?

zhuzhuor commented 11 years ago

@zhumingvictor SAE的服务是流量+请求数计费,不过现在访问量还算小,花费不是太大,只要是个人使用应该没啥问题 我对你的 android app 也比较感兴趣,等实现好了希望也能开源出来让我们学习学习 另外我猜你说的功能直接用 @karlcheong 的 DNS 服务器就行,简单方便,见 http://uku.im/dns

zhumingvictor commented 11 years ago

我现在就使用的这个http://berryphp.ap01.aws.af.cm/digito.php 转发。这个计流量么?

zhuzhuor commented 11 years ago

@zhumingvictor 才注意到 berryphp.ap01.aws.af.cm 这个是 @karlcheong 搞的服务,我自己没用过,回头你可以等等他的回复(他应该是在澳门,估计现在已经睡了) 不过我猜他应该用的是 appfog 的 free tier,每月 5GB 流量,一般应该足够用了

zhumingvictor commented 11 years ago

每次发送请求格式和这个一样http://v.youku.com/player/getPlaylist/VideoIDS/XNjI3MjI1MTcy/Pf/4 我会先发非代理,如果是限制的再发代理请求以节省流量。

zhuzhuor commented 11 years ago

@zhumingvictor 感谢,这样挺好的 扩展程序也一直想实现类似的功能,只是 Chrome 的 API 没有办法读取 req body 里面的数据 http://crbug.com/104058

zhumingvictor commented 11 years ago

你们是否可以尝试用这个api http://developer.chrome.com/extensions/webRequest.html 拦截http请求,通过videoId查看是否是“仅大陆视频”如果是再通过你们的代理。这样应该能省流量。

zhuzhuor commented 11 years ago

@zhumingvictor 现在就在用 webRequest API 但是 Chrome 自己的 API 得不到 http 请求的 body 数据(只有 headers 现在有 api 能看到) 另外普通模式用的代理服务器应该没办法做特别精细的控制,因为代理设置都是全局的,要改进估计也只能在转发模式

或者你是说存个 videoid 的 database,然后凭 videoid 来判断是不是通过 redirect server?

不过照你这么一说我想到个中间插入个 XMLHttpRequest 来解决这个问题的办法,但是实现起来也挺麻烦的

  1. use webRequest API to block a http request
  2. send a blocking xhr request with the same headers and payload
  3. check the response of the xhr req
  4. redirect the original http request if necessary 但是问题就是 http request 可能要等待更长的时间,另外需要仔细分析和及时更新这些 http 请求的返回数据的格式差别
zhumingvictor commented 11 years ago

返回数据是纯json不需要特别分析,里面会有“仅限大陆”的类似字段。而且segs部分会没有,segs储存的是加密过的视频直链接的地址,大陆以外地区是不会反馈的。如果流量不是很大问题确实不值得弄这么一下。

hafa2012 commented 11 years ago

@zhumingvictor 建议: 1,把proxydroid的主要功能集成到你的app里,可以方便地对各种应用进行代理调度。 2,有了app,就不需要pac或者privoxy了,对不? 3,最好允许自定义代理服务器,支持socks,或其他加密代理方式

zhumingvictor commented 11 years ago

@hafa2012 你想的实在太简单了,而且proxydroid 是需要root的。

zhuzhuor commented 11 years ago

@zhumingvictor 主要是扩展支持了不少网站 http://goo.gl/oVDLLO 每个网站的 json 都得随时监控着,以防返回数据的结构有所改变,这也挺折腾的 如果你只针对优酷一个网站做的话那应该还好

hafa2012 commented 11 years ago

有了app就可以随时在线更新规则,就像adblock更新广告列表一样 大家可以资助介个更新列表的小伙伴

hafa2012 commented 11 years ago

@zhumingvictor app开发中吗?等出炉,哈哈

zhumingvictor commented 11 years ago

@hafa2012 https://www.dropbox.com/s/cfk2x69999qkl7h/YKPlayer.apk

hafa2012 commented 11 years ago

@zhumingvictor 挺好用的,感觉比直接看缓冲的快不少! 可以告诉邮件地址么?或者skype