【问题标题】:Python to POST data to local PHP on linuxPython 将数据发布到 Linux 上的本地 PHP
【发布时间】:2013-12-21 06:09:21
【问题描述】:

这听起来可能有点奇怪,但我需要这样发生是有原因的。

我需要 python 能够将数据发布到 linux 服务器上的本地 PHP 文件,然后从 PHP 获得响应。

我试过这个:

p = subprocess.Popen("curl --data 'param1=value1&param2=value2' /home/hbmukwm/temp/receive.php", shell=True, stdout=subprocess.PIPE)
reply = p.stdout.read()

但是当我这样做时,因为它是一个本地文件,我得到了这个 curl 错误:curl: (3) malformed

我也尝试过这种方式(在 stackoverflow 答案中找到)

mydata=[('one','1'),('two','2')]
mydata=urllib.urlencode(mydata)
path='file:/home/hbmukwm/temp/receive.php'
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
reply=urllib2.urlopen(req).read()

但在这种情况下,我得到的 php 响应是纯文本,就像我只是想读取 PHP 文件一样,我再次认为这是因为 PHP 文件是本地的,就像这样:

<?php echo "test"; ?>

不仅仅是

test

希望到目前为止这是有道理的。我需要做的就是将数据POST到本地PHP文件,然后将PHP响应返回给python...这可能吗...

任何回复都非常感谢,对不起我的无知!

【问题讨论】:

  • 您需要将您的 php 代码托管在一些网络服务器(Apache)上才能获得请求的响应。
  • 您不能发布到文件。您 POST 到 Web 服务器,它会代表您调用该文件。

标签: php python linux curl


【解决方案1】:

您需要一个 Web 服务器来运行 PHP 代码。您不能仅将其称为文件系统位置。我建议您在您的机器上安装 [WML]AMP 网络服务器包,它将安装 ApachePHPMySQL > 并且对于初学者来说很容易设置和配置。以下是 AMP 系列的链接。使用那个

【讨论】:

    【解决方案2】:

    您将需要一个 Web 服务器来实际解析和解释 PHP 脚本。但是,如果您想要通过命令行执行此操作,此页面应该会为您提供一些详细信息:PHP Command line usage。您没有提到您使用的是哪个版本的 PHP,但是这似乎从 PHP 4.3.0 起受支持

    【讨论】:

      【解决方案3】:

      我想这是一个品味问题,但我使用的是来自 www.apachefriends.org 的“xammp” 您可以从那里使用 php5、sql 等轻松设置网络服务器。使用 BitNami,您还可以轻松安装 joomla 和其他东西。

      【讨论】:

        【解决方案4】:

        感谢大家的回复,我至少学到了一些东西!我想将它作为本地文件的原因是因为我不希望 PHP 文件可以公开访问,尽管需要从运行应用程序的任何位置将数据发送给它们。所以我的想法是创建一个在 linux 服务器上的端口上运行的小型 python 应用程序,该应用程序接受命令并将它们传递给服务器本地的 PHP 文件。

        无论如何,我得到这个工作的方式是使用命令行(就像我的第一个例子一样),除了使用:

        p = subprocess.Popen("php /path/to/file 'data=this'", shell=True, stdout=subprocess.PIPE)
        

        然后在 PHP 文件中抓取这样的参数

        $data = $argv[1];
        

        这并没有像我最初要求的那样将数据发布到 PHP 文件中,但我想我误解了我需要做什么。所以感谢你们所有的帮助!我真的不知道你的哪个答案是确定的答案,因为你说的都是正确的,但我现在发布的答案是我如何克服这个问题。

        再次感谢大家,Stack Overflow 是最好的 :)

        【讨论】:

        • 我在写这篇文章时不小心用另一个用户帐户登录了,我的错
        猜你喜欢
        • 2014-04-23
        • 2014-01-04
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        相关资源
        最近更新 更多