PHP调用请求HTTPS链接的Python脚本失败问题排查
排查PHP调用Python脚本获取Bittrex卖价失败的问题
看起来你的Python脚本在本地控制台跑没问题,但通过PHP调用就卡壳了,这种情况通常是环境差异或者权限/输出捕获的问题,我给你列几个排查方向,按顺序试应该能找到原因:
先抓错误信息,别瞎猜
你的脚本现在没有任何错误处理,PHP调用时如果脚本报错,你可能根本看不到问题在哪。先给Python脚本加个异常捕获,把错误打出来:import requests import sys print("---------------------------new program --------------------------------") try: # 注意这里把URL里的&改成&,HTML实体编码在直接请求里不需要 r = requests.get(url='https://bittrex.com/api/v1.1/public/getorderbook?market=BTC-XRP&type=both') r.raise_for_status() # 触发HTTP状态码错误(比如403、500) data = r.json() print(data["result"]["sell"][0]["Rate"]) except Exception as e: # 把错误输出到stderr,这样PHP能捕获到 print(f"Error details: {str(e)}", file=sys.stderr)然后修改PHP代码,同时捕获标准输出和错误输出:
// 一定要用Python脚本的绝对路径,比如/home/youruser/bittrex_price.py $python_path = '/usr/bin/python3'; // 换成你实际的Python路径,控制台输which python3能拿到 $script_path = '/path/to/your/bittrex_price.py'; $command = escapeshellcmd("$python_path $script_path") . " 2>&1"; $output = []; $return_code = 0; exec($command, $output, $return_code); echo "Return Code: $return_code<br>"; echo "Output:<br>"; print_r($output);运行PHP页面后,你就能看到具体的错误了——是requests库没装?还是网络连不上?还是JSON解析失败?
检查Python环境一致性
控制台用的Python和PHP调用的Python可能不是同一个!比如你本地用python3是/usr/local/bin/python3,但PHP用的是/usr/bin/python3,后者可能没装requests库。
可以在Python脚本里加一行print(sys.executable),分别在控制台和PHP调用时看输出的路径,然后用那个路径重新装requests:/path/to/php/used/python -m pip install requests权限与网络问题
PHP通常是以web服务器用户(比如www-data、apache)运行的,这个用户可能:- 没有执行Python脚本的权限:给脚本加执行权限
chmod +x /path/to/your/script.py - 没有网络权限访问Bittrex API:检查服务器防火墙、SELinux或者安全组是否阻止了web进程的出站请求
- 没有读取脚本文件的权限:确保web用户对脚本所在目录有读权限
- 没有执行Python脚本的权限:给脚本加执行权限
URL编码坑
你原来的URL里用了&,这是HTML的实体编码,直接在Python的requests.get里应该用普通的&,虽然控制台可能自动兼容,但PHP调用的环境里可能因为编码问题导致请求URL错误,改成&就好。
先按第一步抓错误信息,大部分情况都能直接定位问题,有具体错误了再针对性解决就行。
内容的提问来源于stack exchange,提问作者dramasea
相关产品推荐
相关产品推荐

