Linux CentOS 8 编译安装Apache Subversion

前言

距离上一篇发表已经过去了5年零2个多月,这次重新开始写技术博客,理由和原来一样,也就是想把自己学习和工作中遇到的问题和知识记录下来,今天记录一下Linux CentOS 8通过编译安装svn的过程。

下载SVN

下载地址:链接: https://subversion.apache.org/download.cgi
进入下载页面后,我们可以看到当前source code的推荐版本是1.14.2,直接点击下载源码即可:
在这里插入图片描述
下载好之后将源码上传至指定目录:
在这里插入图片描述
输入命令tar -zxvf subversion-1.14.2.tar.gz进行解压之后,即可看到svn的源码目录,如下图所示:
在这里插入图片描述
最后我们输入命令mv ./subversion-1.14.2 /usr/local/svn/source将源码移动到指定目录,计划将svn安装在/usr/local/svn的根目录下。

编译安装SVN

下载完毕后,开始编译源码安装,进入源码所在的source目录后,执行配置(configure)命令同时指定安装路径:

./configure --prefix=/usr/local/svn

如果控制台没有报错那么直接运行命令make && make install即可完成编译和安装,但是这里报错了,需要根据提示信息去补充安装svn所依赖的部分组件,首先看一下我们的报错信息:在这里插入图片描述
如上图所示,提示缺少Apache可移植运行库APR)这个支持库,它是ApacheHTTP服务器的支持库,提供了一组映射到下层操作系统的API。完整的APR包含3个开发包,分别是:APRAPR-utilAPR-iconv,每一个开发包分别独立开发并且拥有自己的版本。APR-util包含了一些常用的开发组件,结合上图的提示信息,我们在安装svn之前必须安装APRAPR-util

安装APR和APR-util

首先打开APR的官方网站:https://apr.apache.org/:
在这里插入图片描述
如上图所示,打开主页后我们可以清晰的看到官方推荐的APRAPR-util的版本分别是APR 1.7.4APR-util 1.6.3 ,所以我们直接点击左侧的Download!去下载这两个版本的源码即可:
在这里插入图片描述
下载成功后将源码上传至指定目录,这里我将安装svn依赖的各种组件库统一放到/usr/local/svn/dependPackage目录中:
在这里插入图片描述
如上图所示,接下来分别解压之后编译安装即可。APR-util安装依赖于APR,因此需要首先安装APR,进入APR源码目录,依次进行配置、编译、安装即可:

./configure --prefix=/usr/local/apr && make && make install

之后再执行命令make && make install进行编译安装即可。
在这里插入图片描述
如上图所示,我们已经成功编译安装了APR支持库。接下来安装APR-util。同样的进入APR-util目录,依次进行配置、编译、安装即可,注意此处需要通过--with-apr配置项来指定APR的目录:

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

但是安装时候报错了,提示信息如下:
在这里插入图片描述
如上图所示,报错原因是缺少另一个库——Expat,所以接下来我们需要先安装Expat。

安装Expat

Expat的官网地址是:https://libexpat.github.io/
我们在Expat的首页可以清晰的看到关于Expat的解释:

What is Expat?
Welcome to Expat, a stream-oriented XML parser library written in C.
Expat excels with files too large to fit RAM, and where performance and flexibility are crucial.

如上所示,Expat是一个用C语言编写的面向流的XML解析库。Expat擅长处理太大而无法放入内存的文件,以及性能和灵活性至关重要的情况。简单了解一下,接下来从github上下载安装即可,当前的最新版本是2.5.0。下面是Expat的目录结构:
在这里插入图片描述
如上图所示,进入Expat目录后,依次进行配置、编译、安装即可:

./configure --prefix=/usr/local/expat && make && make install

安装好了Expat之后,我们回到上一步再次安装APR-util即可,注意此处需要通过--with-expat配置项来指定Expat的目录:

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat && make && make install

检查一下APR-util安装目录,安装成功即可(如下图所示):
在这里插入图片描述
至此我们已经成功安装了APRAPR-util,解决了初始阶段的报错问题,那么我们回到svn的源码目录,再次通过配置命令检查一下是否可以正常安装,注意此处需要通过--with-apr--with-apr-util配置项来指定APRAPR-util的目录:

./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

运行配置命令之后又发现了新的报错信息:
在这里插入图片描述
如上图所示,提示我们没有合适版本的SQLite,所以接下来我们需要先安装SQLite

安装SQLite

SQLite的官网地址是:https://www.sqlite.org/
SQLite是一个用C语言编写的库,实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎,做Android开发的朋友应该都接触过这个数据库,我们在官方首页直接下载即可,目前最新版本是3.42.0
在这里插入图片描述
直接下载即可,根据报错信息提示,我们需要下载sqlite-amalgamation-xxx.zip这个压缩文件,然后通过unzip命令解压并重命名目录为sqlite-amalgamation,注意这个目录需要放在svn源码目录当中。接下来我们按上述步骤操作,首先进入安装包目录解压缩包,然后再将其移动到指定目录:

unzip sqlite-amalgamation-3420000.zip
mv ./sqlite-amalgamation-3420000 ../source/sqlite-amalgamation

接下来回到svn源码目录检查一下SQLite目录是否存在:
在这里插入图片描述
如上所示,没有问题,接下来我们回到svn源码目录,再次通过配置命令检查一下是否可以正常安装,注意不要忘记通过--with-apr--with-apr-util配置项来指定APRAPR-util的目录:

./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

运行之后发现又有报错信息:
在这里插入图片描述

添加配置项–with-lz4=internal

如上图所示,根据提示,我们加上配置项--with-lz4=internal之后再次运行配置命令:

./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-lz4=internal

又发现了新的报错信息:
在这里插入图片描述
如上图所示,提示svn需要utf8proc,请安装它,所以我们接下来先安装utf8proc

安装utf8proc

utf8procgithub项目地址是:https://github.com/JuliaStrings/utf8proc
utf8proc是一个小巧、干净的C语言库,提供了对UTF-8编码的Unicode数据进行规范化、大小写折叠和其他操作的功能。简单了解一下,目前utf8proc的最新版本是2.8.0,我们直接下载源码上传至指定目录解压:
在这里插入图片描述
如上图所示,然后运行make && make install即可完成utf8proc编译安装。安装完成之后我们再次重复之前的操作,进入svn源码目录运行配置命令检查是否已经可以正常编译安装:

./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-lz4=internal

这次终于没有了任何报错信息,最后我们在svn源码目录运行命令make && make install完成安装即可,看一下安装好之后的svn目录:
在这里插入图片描述

加入PATH环境变量

安装结束之后,首先我们需要把svn的bin目录加入到PATH环境变量中,方便我们全局使用svn命令。首先进入配置文件vi /etc/profileLinux中的系统环境变量PATH的添加方式是通过冒号拼接路径的方式来添加,如下图所示:
在这里插入图片描述
然后运行svn命令检查一下版本:

svn --version

这里报错了,看一下提示信息:
在这里插入图片描述
如上图所示,这里提示加载共享库错误,应该是在上面安装utf8proc时出了一些问题。解决方法很简单,依次按以下步骤操作即可:

  1. 编辑/etc/ld.so.conf文件,执行vi /etc/ld.so.conf,添加下面一行代码/usr/local/lib
  2. 执行ldconfig命令更新缓存。

接下来我们再次运行svn --version命令检查一下svn版本:
在这里插入图片描述
如上图所示,已经可以成功看到svn的版本相关信息,至此环境变量添加结束。

创建SVN版本库

svn安装完成之后,下一步首先要做的就是创建我们的版本库,这里我们选择/home/svn作为svn版本库的根目录,首先创建该目录:

mkdir -p /home/svn

根目录创建完成后,接下来我们创建需要交给svn管理的项目目录,因为svn是以项目为单位去进行版本控制的。例如这里我们有一个项目名叫vue_basic,那么我们接下来在根目录下创建该项目目录:

mkdir -p /home/svn/vue_basic

接下来通过svnadmin create命令进行版本库初始化:

svnadmin create /home/svn/vue_basic

命令执行成功之后我们可以在该目录下看到svn版本库的初始结构:
在这里插入图片描述
如上图所示,这样我们的版本库就已经初始化完毕,db目录是数据文件存放目录,我们上传至svn的代码文件都是以特定格式压缩后存放在这里,而conf目录就是配置文件目录,下面我们要做的就是配置用户权限。

配置SVN服务器

关于SVN服务器配置的相关信息,我们可以在SVN社区的用户手册(the Subversion book)中获取相关信息,在文档中的第6章节(Chapter 6. Server Configuration)可以看到服务器配置的相关说明。下面是关于SVN服务器配置的概述:

Subversion was designed with an abstract repository access layer. This means that a repository can be programmatically accessed by any sort of server process, and the client “repository access” API allows programmers to write plug-ins that speak relevant network protocols. In theory,Subversion can use an infinite number of network implementations. In practice, there are only two Subversion servers in widespread use today.

如上介绍,SVN的设计包括一个抽象的网络层,这意味着版本库可以通过各种服务器进程访问,目前的实践中存在2种SVN服务器。继续看文档中对于这2种SVN服务器的解释说明:

Apache is an extremely popular web server; using the mod_dav_svn module, Apache can access a repository and make it available to clients via the WebDAV/DeltaV protocol, which is an extension of HTTP.In the other corner is svnserve: a small, lightweight server program that speaks a custom protocol with clients.

如上介绍,可以看出这两种服务器方案分别是:

  1. Apache+mod_dav_svn:通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问
  2. svnserve:一个小的,独立服务器,使用自己定义的协议和客户端

这两种方式各有优缺点,我们根据实际需求选择即可。通常情况下中小型团队建议使用svnserve,因为这种方式简单快速且能满足绝大多数情况下的版本控制需求。这里我们也选择使用svnserve,需要分别对3个文件进行配置,它们分别是conf目录下的passwdauthzsvnserve.conf,下面依次进行介绍:

配置用户密码(passwd)

首先第一步我们先打开passwd文件新增svn用户和密码:
在这里插入图片描述
如上图所示,passwdsvnserve的示例密码文件,用于定义访问SVN服务器的用户帐号密码信息。在[users]配置项下面新增用户,格式很简单直接写【用户名=口令】即可,这里我们新增了一个用户名为wangliang且密码为123456的用户。

配置用户权限(authz)

第一步配置了用户之后,接下来我们需要做的就是为已添加的用户配置操作SVN版本库的权限,首先打开/conf/authz文件:
在这里插入图片描述
如上所示,authzsvnserve的示例授权文件,可以看到defines authorizations for the path字样,即是“基于路径的授权策略”,简单来讲,就是配置某个用户(a single user)或者某一组用户(a group of users)对某个目录的访问权限(read/read and write/no access)。我们可以在文档中的Chapter 6.Server Configuration中的Path-Based Authorization章节中我们可以找到相关信息:

Both Apache and svnserve are capable of granting (or denying) permissions to users. Typically this is done over the entire repository:a user can read the repository (or not), and she can write to the repository (or not). It’s also possible, however, to define finer-grained access rules. One set of users may have permission to write to a certain directory in the repository, but not others; another directory might not even be readable by all but a few special people. As files are paths, too, it’s even possible to restrict access on a per file basis.

如上所示,和我们上面总结的结论基本一致,Apache和svnserve都能向用户授权,通常是针对整个仓库进行,对仓库进行读写。也可以更细化的控制到仓库的某个目录的读写,接下来我们依次开始进行配置:

配置用户组(groups)

svnserve允许我们配置一组用户并为他们授权,在授权示例文件中我们可以看到配置示例代码:
在这里插入图片描述
如上图所示,在[group]配置项下,我们通过[用户组名]=[用户组列表]的格式进行用户组配置。用户组列表的每个成员之间通过逗号分隔。例如我们配置两组用户,分别是开发组(dev_group)3名成员和测试组(test_group)3名成员:

[groups]
dev_group=wangliang,libo,fanyuanli
test_group=hubin,liumei,zhangchao

如上图所示,我们定义好了两个用户组之后,接下来我们就为用户或用户组配置权限。

授权

权限分为三种,我们在文档中可以看到相关说明:

grant read (‘r’) access, read-write (‘rw’) access, or no access (‘’).

  1. 只读(r)
  2. 读写(rw)
  3. 禁止访问(’ ')

而授权对象存在6种方式,在上面的svnserve的授权示例文件中我们也可以看到,我们最常用的是以下3种方式,它们分别是:

  1. 单用户(a single user)
  2. 用户组(a group of users)
  3. 所有用户(anyone)

例如:我们要给wangliang用户设置读写权限,给上面创建的test_group测试组用户都设置只读权限,那么授权代码这样写即可:

wangliang = rw
@test_group = r

这里注意引用用户组时需要在前面加上@符号。

只有上面这两行还不够,之前说了svnserve基于路径的授权策略,也就是说我们必须再指定一个目录,当上面的用户或用户组来访问,文档中有以下说明:

To be more specific: the value of the section names is either of the form [repos-name:path] or of the form [path].

如上所示,可以看到通常我们的路径格式是[版本库名:路径],例如,如果我们希望wangliang用户可以操作vue_basic这个版本库的所有内容,按如下配置即可:

[vue_basic:/]
wangliang = rw

如果不指定仓库名称的话,那么你的权限将作用于所有版本库中的同名路径配置中,文档中也有相关说明:

If you’re using the SVNParentPath directive, it’s important to specify the repository names in your sections. If you omit them,a section such as [/some/dir] will match the path /some/dir in every repository. If you’re using the SVNPath directive,however, it’s fine to only define paths in your sections—after all, there’s only one repository.

最后再给出几个简单示例,加深理解:

[groups] 
xnzz_test = songming,liqiang,zhoufang[xnzz:/] 
@xnzz_test = r
* =[xnzz_dev:/home/wangliang] 
wangliang = rw
* = r

上面的代码定义了1个用户组xnzz_test,有3名成员。定义了2个版本库xnzzxnzz_devxnzz版本库下的所有目录只有xnzz_test用户组的成员可以进行读操作,其余所有用户禁止访问。xnzz_dev版本库的/home/wangliang目录只有wangliang用户可以进行读写操作,其余用户禁止访问。

配置svnserve.conf

最后还需要配置一下/conf/svnserve.conf这个文件,它是svnserve服务器的一个全局配置文件。我们打开之后可以看到它的说明简介:
在这里插入图片描述
通常我们只需要配置[general]这个section中的以下属性:

  1. anon-access:控制非授权用户访问版本库的权限。取值范围为writereadnone。默认值为read只读。
  2. auth-access:控制授权用户访问版本库的权限。取值范围为writereadnone。默认值为write可修改。
  3. password-db:指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf 目录的相对路径。 默认值为passwd,也就是我们刚才配置的密码文件。
  4. authz-db:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。 默认值为authz-db,同样的这也是我们刚才配置过的授权文件。
  5. realm:指定版本库的认证域,即在登录时提示的认证域名称,不用配置也没关系。

保存之后,至此我们svn服务器的配置内容就全部结束了。

启动SVN服务器

输入命令:

svnserve -d -r /home/svn/

即可启动SVN服务器,注意启动路径必须是版本库的根目录,而不是某个子目录。

停止SVN服务器

输入命令:

killall svnserve

即可停止SVN服务器。

Windows客户端测试连接

成功启动SVN服务器之后,我们通过Windows客户端工具TortoiseSVN来连接测试一下是否可以正常进行版本控制。直接搜索安装TortoiseSVN即可,安装好之后鼠标右键点击TortoiseSVN-->Repo browser进入版本库浏览器界面:
在这里插入图片描述
如上图所示,输入svn://ip/仓库名即可,注意一下Linux系统需要放开SVN的6379端口。点击确定之后如果没有什么问题会弹出输入框:
在这里插入图片描述
如上图所示,输入我们之前在passwd文件中配置的用户名和密码,直接登录即可,登录成功后可以看到下面的版本库浏览器界面:
在这里插入图片描述
至此我们就可以使用SVN开始进行版本控制了,简单的文件管理直接使用TortoiseSVN,代码管理则需要在相关的IDE中集成SVN插件并进行相关配置即可。

总结

本篇blog简单记录一下Linux下搭建SVN服务器的过程,尽管目前分布式版本控制工具Git已成为主流,但SVN依然是集中式版本控制工具的代表。希望对遇到类似问题的朋友有所帮助,The End。(ps:时隔5年多的第一篇csdn博客,后面会继续坚持记录技术路程的点点滴滴,加油!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存分析工具之Mat

自定义类MatClazz内存个数为9521。当前对象占用内存为16个字节。不包括其属性bytes的字节数。 通过查看MatClazz引用的类之byte数组之bytes。其单个数组占用的字节数为10256。整个内存MatClazz中属性bytes占用的byte[]字节数为97746376,与直方图统计趋近。 通过选…

基于YOLOv8开发构建蝴蝶目标检测识别系统

在前面的一篇博文中已经很详细地描述了如何基于YOLOv8开发构建自己的个性化目标检测模型,感兴趣的话可以看下: 《基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】》 本文的主要目的就是基于YOLOv8来开发构建细粒度的蝴蝶目标…

MD-MTSP:斑马优化算法ZOA求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、斑马优化算法ZOA 斑马优化算法(Zebra Optimization Algorithm,ZOA)Eva Trojovsk等人于2022年提出,其模拟斑马的觅食和对捕食者攻击的防御行为。斑马优化算法(Zebra Optimization Algorithm,ZOA&#x…

高等数学教材啃书汇总难点(一)函数与极限

教材为理工科标配的同济大学第七版,本系列为一轮啃书,将必会的全部重难点悉数总结——尤其是各种晦涩的理论证明部分,考研数学一的选手,想冲击高分的话必须掌握。对于考研证明题部分,熟练掌握定义是必不可少的底层基础…

网络是怎样连接的

文章目录 概述英语缩略语一、Web浏览器二、协议栈、网卡三、集线器、交换机、路由器四、接入网、网络运营商五、防火墙、缓存服务器六、Web服务器总结 概述 从在浏览器中输入网址,到屏幕上显示出网页的内容,在这个只有几秒钟的过程中,很多硬…

Nautilus Chain 即将治理通证 NAUT ,生态发展进程加速

独特且优势明显的 Nautilus Chain 目前,行业内首个模块化底层 Nautilus Chain 已经上线主网,并且即将有超过 70 个应用原生部署在 Nautilus Chain 上。Nautilus Chain 本身是一个以 Layer3 为定位的区块链系统,其通过 Celestia 模块化底层来…

paddle实现获取pdf的内容

paddle实现获取pdf的内容 1. 环境安装2. 实现代码 源码链接 1. 环境安装 安装paddlepaddle gpu版本python -m pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simplecpu版本:python -m pip install paddlepaddle -i https://pypi.tuna.tsing…

vue3项目基于vue-router跳转到登录页面

创建项目 #创建项目 #选择vue3 选择npm vue create devops-front#安装vue-router 路由 npm install -g cnpm --registryhttps://registry.npmmirror.com cnpm install vue-router4 #启动项目 vue run serve app.vue 定义<router-view/> 路由入口 <template>&l…

opencv04-掩膜

opencv04-掩膜 抠图 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <vector> #include <array> #include <algorithm>using namespace std; using namespace cv;int main() {str…

wine意大利红酒数据标准化案例

1.数据和环境准备 将通过意大利红酒的部分数据&#xff0c;调用scikit-learn包&#xff08;sklearn&#xff09;分别实现0-1标准化和z-score标准化&#xff0c;总结学习这两种标准化方法的特点。 本案例使用的环境为Anaconda Jupyter notebook。 2.数据说明 我们使用的是U…

Android Studio多渠道打包

使用环境&#xff1a; Android studio 多渠道打包 使用方法&#xff1a; 1 APP下build.gradle文件 flavorDimensions "default"productFlavors {huawei {dimension "default"manifestPlaceholders [ channel:"huawei" ]}xiaomi {dimension &…

SciencePub学术 | 计算机科学类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 计算机科学类重点SCIE征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机科学类重点SCIE 【期刊简介】IF&#xff1a;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff1b; 【出版社】世界排名…

windows下tomcat无故宕机,检测http或https服务,并自动重启Tomcat服务

一、问题描述及解决原理 把项目发布到windows服务器中&#xff0c;如tomcat工程不稳定&#xff0c;会有无故宕机的问题。如果通过程序无法解决&#xff0c;并且重启tomcat服务能够生效的话&#xff0c;可以做一个自动检测并重启的脚本。 脚本通过检测tomcat对应的工程链接&…

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了&#xff0c;实际上使用场景并不是很多&#xff0c;感觉有点浪费…

Ubuntu 离线部署的常见操作

Ubuntu 离线安装的常见操作 **说明&#xff1a;**很多情况下,生产环境都是离线环境&#xff0c;然而开发环境都是互联网的环境&#xff0c;因此部署的过程中需要构建离线安装包; 1. 下载但是不安装 # 例如使用 apt 下载 wireshark 安装包 sudo apt download wireshark # 下载…

【数据结构】无头+单向+非循环链表(SList)(增、删、查、改)详解

一、链表的概念及结构 1、链表的概念 之前学习的顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;而链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的&#xff0c;可以实现更加…

下载离线版的VS Visual Studio 并下载指定的版本

一、先下载引导程序 下载地址VS VisualStudio官网 在这个页面翻到最下面 在这里下载需要的版本 下载引导程序 二、下载离线安装包 写一个批处理文件&#xff08;vs.bat&#xff09; 命令格式如下 <vs引导程序exe> --layout <离线安装包下载的路径> --add <功能…

1、Tomcat

java介绍 Java语言和平台由以下几个主要部分组成&#xff1a; 1、Java编程语言(Java Language)&#xff1a;这是Java的核心部分&#xff0c;包括Java语法、关键字、数据类型、运算符、控制结构等。程序员使用Java语言来编写应用程序的源代码。 2、Java开发工具包(Java Developm…

Android Layout大点兵

原文链接 Android Layout大点兵 智能手机催生了移动互联时代&#xff0c;现如今移动应用越来越成为最为核心的终端。而GUI页面是移动互联终端的标配&#xff0c;做好一个GUI页面&#xff0c;是非常重要的&#xff0c;能极大的提升用户体验和用户满意度。安桌生态&#xff0c;自…

kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示

参考资料 OpenWeatherMap提供了一个/forecast接口&#xff0c;用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口&#xff0c;并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数&#xff1a; URL: http://api.openwe…