【问题标题】:How does a desktop application get information back from a website?桌面应用程序如何从网站获取信息?
【发布时间】:2023-03-17 02:26:01
【问题描述】:

我是一名桌面应用程序开发人员。我正在创建一个基本网站,用于销售我编写的应用程序,并在此过程中学习了一些网络技术,但还没有学到很多东西(我选择的 CMS - Textpattern - 到目前为止让我学习了很多 PHP )。

我希望我的桌面应用程序调用我的网站并说“我是 xxxx 版本”,我需要它来获得响应 - 至少“有/没有更新”,最好还有“它是一个 xKB 下载并具有这些功能...” - 这样我就可以向用户显示信息并询问他们是否要下载它。

我可以从我的应用程序发送一个请求(一旦我了解了 Qt 的 QtNetwork 模块)。我的问题是,我需要学习什么才能从网站创建和发送适当的响应。

我可以学习任何必要的新技术/语言,我只是想确保我学习的是正确的东西,而不是走错路。非常感谢任何帮助。

【问题讨论】:

  • 只是为了澄清 - 这是我在网站上所做的事情,我遇到了问题。 Qt 确实具有发送 HttpRequest 的能力。但是诸如“回显某些东西”或“让您的服务器端响应”或“php 脚本检查”之类的短语对我来说意义不大。我该怎么写才能做到这一点?

标签: php http networking desktop


【解决方案1】:

使用网络服务的最简单方法是通过 REST:

这是一个非常快速和肮脏的 PHP 脚本,在您的服务器 document_root 中保存为“versioncheck.php” - 简单地了解要点:

<?
define ("CURRENT_VERSION", "5");

$version = $_REQUEST['version'];

if ($version < CURRENT_VERSION) print "Update required";
else print "YOU'RE ALL GOOD";
?>

您的应用会调用http://wwww.yoursever.com/versioncheck.php?version=2

假设您的桌面应用程序有一个名为“getHTTP”的函数,它可以检索 HTTP 页面。变量“currentVersion”是您的桌面应用当前版本号。
所以你的代码会是这样的:

//NOTE: I don't know the syntax of your desktop app's language, so just treat this as highlevel pseudo code.

/** all sorts of other goodness **/
//CheckVersion
upgrade = getHTTP("http://wwww.yoursever.com/versioncheck.php?version="+currentVersion); 
if (upgrade == "Update Required") then doUpdate(); // doUPdate is some function you've defined to act as a handler for when an update needs to occur
else
{
... continue on with app ...
}

【讨论】:

  • 谢谢,这就是我正在寻找的东西(我认为),但是“需要更新”在哪里得到“打印”?我的应用程序将如何读取它?
  • 您的应用程序会将其读取为您请求的网页的响应。然后,您的应用程序只需接收该响应并将其显示给用户。
  • Rigth - PHP 端的输出(打印)将成为调用网页的函数的返回字符串。我已经更新了我的答案以反映这一点
【解决方案2】:

最简单的方法是使用 HTTP 协议。将应用程序版本作为获取参数传递(即“www.yoursite.com/auto/update.php?version=1.0.2”)并回显某些内容而不是 HTML,例如“最新”或“新版本: 1.1.0"。

对于您使用的任何语言和平台,有许多库可以帮助您处理桌面端(不确定 QT 是否包含 HTTP 内容,尽管我想您可以自己完成所有 HTTP 标头内容)。

编辑:对于 php 方面所做的事情,你可以有一些简单的东西,比如

(希望这个逻辑是正确的,我只是很快想出了它:))

<?php
    //change this whenever you bring out a new version
    $current_version = array(1, 1, 0);

    $version = $_GET['version'];

    //split the version string into the 3 numeric parts
    $version = split('.', $version);

    //compare $version and $current_version
    if(    $version[0] < $current_version[0]
        || $version[1] < $current_version[1]
        || $version[2] < $current_version[2])
    {
        echo "update_needed, $current_version[0].$current_version[1].$current_version[2]";
    }
    else echo "up_to_date";
?>

Obv 如果您使用与“x.x.x”不同的版本字符串,那么您需要根据需要更改代码。如果您决定只使用单个版本号,则可以将数组内容替换为单个 if($version

如果有可能获得比当前版本更新的版本(例如,在测试、beta 等期间),那么该代码可能会错误地报告更新(例如,如果用户有 2.0.0 测试版本,并且“官方”版本是 1.3.0,然后它会说需要更新,因为 0

【讨论】:

    【解决方案3】:

    带有 XML/JSON 的 HTTP 是一个很好的起点。

    让您的服务器端响应通过 HTTP 发送的 XML/JSON 查询。

    在您的情况下,它很可能是您的 Web 服务器正在提供的 XML 文档。

    【讨论】:

      【解决方案4】:

      这可以像让您的应用发出请求一样简单

      http://website.com/checkupdates.php?v=<current_version>
      

      您的程序填写 current_version。

      php 脚本检查是否有新版本并相应地响应信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        相关资源
        最近更新 更多