我有一个 Python 脚本,它使用 urllib2 从外部站点检索数据。我在需要代理身份验证的公司网络上。
在命令行上,我可以在 .bashrc 中导出代理设置,以允许脚本通过代理退出并发出请求。
所以脚本确实在代理后面工作。
这是问题所在:我需要从网站上的 php 脚本调用这个 Python 脚本。我尝试了几种方法来通过调用脚本来实现这一点:exec()、popen()、shell_exec()
我无法让脚本返回任何结果。当拖尾 /var/log/httpd/error* * 我可以看到正在生成的错误:
urllib2.URLError: <urlopen error [Errno 110] Connection timed out>, referer:
这是我在 .bashrc 中设置代理之前收到的相同错误
我已将 suPHP 设置并配置为以特定用户身份运行脚本。我还设置了所有文件,包括该用户拥有的 python 脚本,并调整了权限,尝试 +x 并且出于测试目的不安全地设置为 777。
我可以从网站的同一目录运行一个 php 脚本,并验证 Apache 是否在该用户下运行,只需:
echo exec('whoami');
我还可以使用相同的设置从同一个 PHP 页面执行一个简单的 Python 脚本,该设置只打印到标准输出,我可以将该值返回到网页,所以我知道我可以使用这种方法执行 Python 脚本。
在命令行中,我 su 到与运行 Apache 的用户相同的用户,并在该帐户中设置代理,但是,从网页执行时脚本仍然无法正确执行,仍然只能在命令行界面。
只是为了测试,我在 Python 脚本中添加了一行写入文件,目的是将数据写入我需要返回的文件,并认为我可以稍后再读取该文件。我注意到,文件的创建工作,但没有数据写入它,因为 urllib2 代码超时并且从不写入文件。
知道如何让我的 PHP 脚本执行这个需要代理访问的 Python 脚本吗?
我需要明确告诉 urllib2 使用代理吗?我正在使用的 urllib2 例程是 Python 模块的一部分,该模块被编码为仅使用操作系统的代理设置,而且我知道它可以工作,因为我可以在 CLI 的 Apache 用户下执行它。
任何帮助是极大的赞赏。