免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8028 | 回复: 9
打印 上一主题 下一主题

请教php中用curl访问google tts [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-20 14:57 |只看该作者 |倒序浏览
大家好!
我有一个问题向大家请教。

我的服务器在公司防火墙之内,需要通过http代理上网,所以我在原来可以正常执行的php程序中加了curl实现通过http代理上网的代码。
但是发现并不能正常执行。请大家帮我看看错在哪里呢?
  1. <?php
  2. header("Content-Type: text/html; charset=UTF-8");
  3. date_default_timezone_set('PRC');
  4. $cweekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
  5. $now = getdate(time());
  6. $cur_wday=$now['wday'];
  7. $cur_mon=$now['mon'] - 1;
  8. $cntime = date("现在时刻:Y年n月j日$cweekday[$cur_wday],G点i分。");
  9. echo $cntime;

  10. $newfname = './tmp/now.wmv';
  11. $creqBaseURL = 'http://translate.google.cn/translate_tts?ie=UTF-8&q=' . $cntime . '&tl=zh-CN';

  12. //这里开始是新加的内容。
  13. $ch = curl_init();
  14. $timeout = 5;
  15. curl_setopt($ch, CURLOPT_URL, $creqBaseURL);
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  18. curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
  19. curl_setopt($ch, CURLOPT_PROXY, "sg.proxy.alcatel-lucent.com");
  20. curl_setopt($ch, CURLOPT_PROXYPORT, 8000);
  21. curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:password");
  22. curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
  23. $file_contents = curl_exec($ch);
  24. //这里结束是新加的内容

  25. $cremote_file = fopen($file_contents, "rb");  //原来这句是$cremote_file = fopen($creqBaseURL, "rb");

  26. $newf = fopen($newfname, "wb");
  27. if ($newf){
  28.   while(!feof($cremote_file)){
  29.    fwrite($newf, fread($cremote_file, 1024 * 8),1024 * 8);
  30.   }
  31. fclose($newf);
  32. }
  33. fclose($cremote_file);

  34. curl_close($ch);
  35. echo '<embed loop="1" autostart="true" hidden="true" src=./tmp/now.wmv />';
  36. ?>
复制代码
php报的错是:[Mon Jul 20 14:42:48 2015] [error] [client 192.11.236.118] PHP Warning:  fopen(): Filename cannot be empty in /var/www/html/1.php on line 34

为什么会出这个错呢?
请指教。
谢谢大家!

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
2 [报告]
发表于 2015-07-21 10:13 |只看该作者
$cremote_file = fopen($file_contents, "rb");  这句有问题,$file_contents 不是url不是文件名

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2015-07-21 20:12 来自手机 |只看该作者
调试一下,究竟fopen的是什么内容

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
4 [报告]
发表于 2015-07-21 22:32 |只看该作者
对,这句看起来是错了,但是应该怎么改呢?

回复 2# bikong0411


   

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
5 [报告]
发表于 2015-07-22 10:05 |只看该作者
回复 4# bikkuri


    你自己fopen远程url或者直接curl就可以了啊

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
6 [报告]
发表于 2015-07-22 12:08 |只看该作者
fopen远程url不行,因为不通过代理服务器上不了网。
直接将curl得到结果保存到文件我试了也不行,但是我觉得是我保存的方法不对,能不能指点一下应该怎么改。

bikong0411 发表于 2015-07-22 10:05
回复 4# bikkuri
你自己fopen远程url或者直接curl就可以了啊

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
7 [报告]
发表于 2015-07-23 11:05 |只看该作者
回复 6# bikkuri
  1. file_put_contents('file',$content);
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
8 [报告]
发表于 2015-07-24 01:39 |只看该作者
谢谢您的帮助。
我改成以下内容以后,可以正常工作了。
  1. <?php
  2. header("Content-Type: text/html; charset=UTF-8");
  3. date_default_timezone_set('PRC');
  4. $cweekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
  5. $now = getdate(time());
  6. $cur_wday=$now['wday'];
  7. $cur_mon=$now['mon'] - 1;
  8. $cntime = date("现在时刻:Y年n月j日$cweekday[$cur_wday],G点i分。");

  9. echo $cntime;
  10. $newfname = './tmp/now.wmv';
  11. $creqBaseURL = 'http://translate.google.cn/translate_tts?ie=UTF-8&q=' . $cntime . '&tl=zh-CN';

  12. $ch = curl_init();
  13. $timeout = 120;
  14. curl_setopt($ch, CURLOPT_URL, $creqBaseURL);
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  16. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  17. curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
  18. curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
  19. curl_setopt($ch, CURLOPT_PROXY, "my_proxy_ip:80");
  20. curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
  21. $cstream = curl_exec($ch);

  22. file_put_contents($newfname, $cstream);

  23. curl_close($ch);
  24. echo '<embed loop="1" autostart="true" hidden="true" src=./tmp/now.wmv />';
  25. ?>
复制代码
但是并没有播放出声音,我查看./tmp/now.wmv的内容发现这个文件的内容如下:
  1. <HTML><HEAD>
  2. <TITLE>Access Denied</TITLE>
  3. </HEAD>
  4. <BODY>
  5. <FONT face="Helvetica">
  6. <big><strong></strong></big><BR>
  7. </FONT>
  8. <blockquote>
  9. <TABLE border=0 cellPadding=1 width="80%">
  10. <TR><TD>
  11. <FONT face="Helvetica">
  12. <big>Access Denied (authentication_failed)</big>
  13. <BR>
  14. <BR>
  15. </FONT>
  16. </TD></TR>
  17. <TR><TD>
  18. <FONT face="Helvetica">
  19. Your credentials could not be authenticated: "". You will not be permitted access until your credentials can be verified.
  20. </FONT>
  21. </TD></TR>
  22. <TR><TD>
  23. <FONT face="Helvetica">
  24. This is typically caused by an incorrect username and/or password, but could also be caused by network problems.
  25. </FONT>
  26. </TD></TR>
  27. <TR><TD>
  28. <FONT face="Helvetica" SIZE=2>
  29. <BR>
  30. For assistance, contact your network support team.
  31. </FONT>
  32. </TD></TR>
  33. </TABLE>
  34. </blockquote>
  35. </FONT>
  36. </BODY></HTML>
复制代码
用户名和密码都是正确的,我在浏览器里是可以正常返回音频文件的。
请问是哪里还有问题呢?
另外想问一下php能不能一步一步地跟踪执行,方便看问题出在哪一步的?
谢谢。

bikong0411 发表于 2015-07-23 11:05
回复 6# bikkuri

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
9 [报告]
发表于 2015-07-25 09:20 |只看该作者
回复 8# bikkuri


    打log或者var_dump分步去调试吧

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
10 [报告]
发表于 2015-07-27 17:31 |只看该作者
谢谢您的指点。
我在公司的文档上看到说如果用CURLOPT_USERAGENT设置user_agent为WGET或者CURL的话,可能免验证直接代理出去。
  1. 6.1        WGET
  2. Any application that is able to present a user agent string that begins with WGET will be able to access the internet unauthenticated, but governed by the default URL policy.

  3. 6.2        CURL
  4. Any application that is able to present a user agent string that begins with CURL will be able to access the internet unauthenticated, but governed by the default URL policy.
复制代码
那这个user agent string应该怎么写呢?
我在网上看到的user agent一般都是"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
我把它改成了:
  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  3. curl_setopt($ch, CURLOPT_USERAGENT, 'CURL');
复制代码
然后访问google tts,结果代理服务器返回来的错误是:
  1. 403. That’s an error.
  2. Your client does not have permission to get URL /translate_tts?ie=UTF-8&q=%E7%8E%B0%E5%9C%A8%E6%97%B6%E5%88%BB%EF%BC%9A2015%E5%B9%B47%E6%9C%8827%E6%97%A5%EF%BC%8C%E6%98%9F%E6%9C%9F%E4%B8%80%EF%BC%8C17%E7%82%B913%E5%88%86%E3%80%82&tl=zh-CN from this server. (Client IP address: 192.11.236.120)
复制代码
是不是user agent光写一个CURL不行啊?后面还要跟什么东西吗?

bikong0411 发表于 2015-07-25 09:20
回复 8# bikkuri
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP