Python请求-向PHP返回响应

时间:2019-03-18 07:49:24

标签: python python-requests

我正在尝试通过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 根本不打印。 我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试这种方式:

  

shell_exec(“ python /home/myusername/public_html/py/fetch.py​​ $ url 2>&1”);

您可以在自己的python脚本中看到错误。

答案 1 :(得分:1)

根据official documentationshell_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