我正在尝试通过PHP使用Python请求来抓取页面
index.php :
<?php
$url = $_GET['url'];
$output = shell_exec("python /home/myusername/public_html/py/fetch.py $url");
echo $output;
这是我的 fetch.py :
#! /usr/bin/python
import requests
import sys
url = sys.argv[1]
headers = {'cache-control': 'no-cache'}
try:
r = requests.request("GET", url, headers=headers)
#print r.status_code
#sys.exit(1)
except requests.exceptions.RequestException as e:
print e
sys.exit(1)
if not r.text:
print("Response Empty")
else:
print(r.text)
我尝试检查状态码,它是200。我尝试检查响应是否为空,不是。但是 r.text 根本不打印。 我在这里做错了什么?
答案 0 :(得分:1)
尝试这种方式:
shell_exec(“ python /home/myusername/public_html/py/fetch.py $ url 2>&1”);
您可以在自己的python脚本中看到错误。
答案 1 :(得分:1)
根据official documentation,shell_exec
中包含一些渔获物
您可能需要稍微更新代码。您的代码中可能存在错误,这些错误基本上已被重定向到stderr
,因此没有被捕获在stdout
中。进一步read this
回到您的问题。编辑您的代码
<?php
$url = $_GET['url'];
$output = shell_exec("python /home/myusername/public_html/py/fetch.py $url 2>&1");
echo $output;
?>
将Python代码更新为:
#! /usr/bin/python
import requests
import sys
url = sys.argv[1]
headers = {'cache-control': 'no-cache'}
try:
r = requests.request("GET", url, headers=headers)
#print r.status_code
#sys.exit(1)
except requests.exceptions.RequestException as e:
print e
sys.exit(1)
if not r.text:
print("Response Empty")
else:
print(r.text.encode('utf-8')) # changes