如何使用 mediawiki 的 api、curl 和 bash 登录?

2024-06-20

我对流程的理解:
来自 mediawikis 登录手册https://www.mediawiki.org/wiki/API:登录 https://www.mediawiki.org/wiki/API:Login

使用 MediaWiki 的 Web 服务 API 时,您可能需要应用程序或客户端登录。这涉及提交登录查询、构建 cookie,以及通过重新提交登录请求并返回确认令牌来确认登录。

1) 尝试使用用户名和密码登录,这将失败,并在响应 html 中显示“result="NeedToken"”。响应还将包含下次登录尝试时传入的令牌。
2)再次尝试登录,这次除了un/pw之外还传入token。这应该返回“结果=“成功””

My code:

###Attempt first login setup cookie jar
loginRes1=$(curl --cookie-jar cjar -X POST "$domain/wiki/api.php?action=login&lgname=$lgname&lgpassword=$lgpassword")

###Grab the token from login attempt
lgtoken=$(echo $loginRes1 |sed -rn "s/.*token="([0-9a-zA-Z]+)".*/\1/p" )

###Attempt second login, this time passing token as well
loginRes2=$(curl --cookie-jar cjar -X POST "$domain/wiki/api.php?action=login&lgname=$lgname&lgpassword=$lgpassword&lgtoken=$lgtoken")

Result:

echo $loginRes1
###Only relevant html from echo shown below, cleaned up into xml syntax
<?xml version="1.0"?> <api> <login result="NeedToken" token="944af711913a037cfb8b90d477d51f6c" cookieprefix="ronk" sessionid="isqvhm955lj35g1q2e2klme091" /> </api> 

echo $loginRes2 
###Only relevant html from echo shown below, cleaned up into xml syntax
<?xml version="1.0"?> <api> <login result="NeedToken" token="ffdd1aa6dc3699df26b9de6dd1c6d5a5" cookieprefix="ronk" sessionid="fdahoh4gh7junrqm1tk2p1qd25" /> </api> 

我第二次仍然得到 NeedToken 结果,而不是我期望的成功。

通过浏览器登录
我可以使用表单提交的浏览器正常登录,post请求包含4个参数:wpName、wpPassword、wpLoginAttempt、wpLoginToken

wpName=myName&wpPassword=myPassword&wpLoginAttempt=Log+in&wpLoginToken=d3fe3a1de6fbc934acd3039149f3c56d

其他注意事项
1)我确认通过浏览器正常登录时un/pw可以工作。
2)我不清楚我是否正确使用了curl cookie-jar语法
3) 我不知道我正在连接的 mediawiki 版本,它是最近安装的,可能是最高的稳定版本。
4)您会注意到,在成功的浏览器尝试中,参数具有 wp 前缀而不是 lg,如果我更改curl 尝试以匹配(即 wpName、wpPassword),则返回的结果为:

<?xml version="1.0"?> <api> <warnings> <main xml:space="preserve">Unrecognized parameters: 'wpName', 'wpPassword'</main> </warnings> <login result="NoName" /> </api> 

The --cookie-jarcurl 的选项仅告诉curl 将cookie 保存到jar 中。它没有告诉curlload罐子里的饼干。

要让curl从jar中加载cookie,您需要使用-b指定要使用的 cookie jar 的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 mediawiki 的 api、curl 和 bash 登录? 的相关文章

  • 无法卷曲 git 标签

    我想通过命令行卷曲 git 标签 curl O http someurl 但是当我尝试解压文件时它被破坏了 有谁知道问题是什么 You can curl来自 GitHub 等 git 存储库托管服务的 git 标签 因为它有专用压缩包服务
  • Laravel 5 Socialite - cURL 错误 77:设置证书验证位置时出错

    我正在 Laravel 5 中使用社交名流来设置 facebook 登录 我仔细按照说明进行操作 直到出现以下错误 cURL error 60 SSL certificate problem unable to get local issu
  • 仅当程序成功时如何重定向程序的输出?

    当我的程序之一返回非零退出代码时 我想避免重定向其输出 这可能吗 如果可以 我该怎么做 我失败的尝试 echo foo gt file false cat gt file 这导致file是空的 我想要的行为只是调整file当程序成功时 我还
  • php中使用Curl读取Cookie,如何操作?

    我正在连接到一个 API 服务 该服务使用 cookie 对用户进行身份验证 我从命令提示符处发出这两条语句并且它有效 curl d u username p password c cookiejar https domain login
  • 比较两个文件的各自字段并以特定格式输出所需的内容

    我正在比较两个文件 food1 txt 文件并比较 food2 txt 文件 如下所示 cat food1 txt pizza 1ea chicken 5ea tooboo 4ea orange 2ea cat food2 txt pizz
  • 通过多个换行符分割文件

    假设您有以下输入文件 Some text It may contain line breaks Some other part of the text Yet an other part of the text 并且您想要迭代每个文本部分
  • 如何让 Rscript 在非交互式 bash 模式下返回状态代码

    我正在尝试以 bash 脚本的形式从以非交互方式运行的 Rscript 中获取状态代码 此步骤是较大数据处理周期的一部分 其中涉及 db2 脚本等 所以我在脚本sample sh中有以下内容 Rscript verbose no resto
  • 如何在 Linux Bash 中通过 SFTP 将数据传输到远程文件而不将数据存储在本地文件中?

    我需要能够通过 SFTP 将数据从内存传输到远程文件 我最初是通过 SSH 进行此操作的 在工作时发现我没有对远程位置的 SSH 访问权限 只有 SFTP 访问权限 下面是我的原始 SSH 代码的示例 echo secret data ss
  • 如何防止 Conda 默认激活基础环境?

    我最近在我的 Mac 上安装了 anaconda2 默认情况下 Conda 配置为在我打开新的终端会话时激活基本环境 我想要访问 Conda 命令 即我想要将 Conda 的路径添加到我的 PATHConda 在初始化时会执行此操作 所以没
  • 如何判断输入来自哪个键盘

    设想 我有一个 USB RFID 读取器 将其连接到笔记本电脑后 它可以用作新连接的 USB 键盘 例如无需安装任何驱动程序 当接触带有 RFID 标签的阅读器时 它进入我当前的窗口 例如终端 外壳 RFID 号码 例如0009339384
  • 为什么 iTerm2 中不显示 git 颜色

    所以我有我的 gitconfig 设置来处理颜色 在终端中它工作得很好 看起来也不错 然而 在 iTerm2 中 除非我为 git 设置反向属性 否则我的 gitconfig 根本不会显示颜色 然后它们就出现了 但是谁喜欢相反的颜色呢 为什
  • grep 以特定字符串开头的行

    我想找到文件中以特定字符串开头的所有行 问题是 我事先不知道字符串里有什么 该值存储在变量中 天真的解决方案如下 grep my string file txt 因为如果 Bash 变量my string包含任何正则表达式特殊字符 grep
  • 使用 api 列出 github 上的所有 Java 存储库

    我正在尝试获取特定语言 例如 Java 的所有 github 存储库的列表 而不通过任何特定关键字缩小搜索范围 最好 我想直接从curl 执行此操作 无需编写脚本 问题是我尝试格式化 API URL 但没有找到正确的 URL 其中包括lan
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • 如何在Java中使用cURL?

    我想在java中使用curl curl 是 Java 内置的还是我必须从任何第 3 方源安装它才能与 Java 一起使用 如果需要单独安装 如何安装呢 您可以利用java net URL http docs oracle com javas
  • Bash IF:多个条件

    我已经尝试让这件事工作几个小时 但我无法让它工作 if P SFTP a PORT 22 P FTPS PORT 990 a PORT 21 then 有人能帮我吗 我知道多个条件可以这样写 if P SFTP PORT 22 then 但
  • 使用环境变量将参数传递给命令

    我正在尝试编写一个 bash 脚本 该脚本采用环境变量并将其传递给命令 所以如果我有类似的东西 export OUT a arg1 b arg2 0 arg2 1 我想在我的 bash 脚本中执行以下操作
  • 使用sed插入文件内容

    我试图在给定模式之前插入文件内容 这是我的代码 sed i pattern i r scriptPath adapters default permissions xml manifestFile 它添加路径而不是文件的内容 有任何想法吗
  • 带有客户端证书身份验证的curl

    我们喜欢使用客户端证书身份验证而不是基本身份验证来访问网络服务器 证书是 PEM 证书 密钥文件是单独的文件 卷曲调用如下所示 curl v cert cert crt key key key pass foobar https tests
  • 将新行 JSON 上传到 Elasticsearch 批量 API

    我正在尝试使用 Bulk API 将新行 JSON 上传到 Elasticsearch 我上传的批量 JSON 如下所示 每个 JSON 都占一个新行 ip x x x x seen true classification maliciou

随机推荐