如何以编程方式登录 WordPress?

2023-11-27

我需要以编程方式在 WordPress 管理面板中执行一些操作,但无法管理如何使用 C# 和 HttpWebRequest 登录 WordPress。

这是我所做的:

private void button1_Click(object sender, EventArgs e)
        {
            string url = "http://localhost/wordpress/wp-login.php";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            CookieContainer cookies = new CookieContainer();

            SetupRequest(url, request, cookies);
            //request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            //request.Headers["Accept-Language"] = "uk,ru;q=0.8,en-us;q=0.5,en;q=0.3";
            //request.Headers["Accept-Encoding"] = "gzip,deflate";
            //request.Headers["Accept-Charset"] = "windows-1251,utf-8;q=0.7,*;q=0.7";


            string user = "test";
            string pwd = "test";

            request.Credentials = new NetworkCredential(user, pwd);

            string data = string.Format(
                "log={0}&pwd={1}&wp-submit={2}&testcookie=1&redirect_to={3}",
                user, pwd, 
                System.Web.HttpUtility.UrlEncode("Log In"),
                System.Web.HttpUtility.UrlEncode("http://localhost/wordpress/wp-admin/"));

            SetRequestData(request, data);

            ShowResponse(request);
}

private static void SetupRequest(string url, HttpWebRequest request, CookieContainer cookies)
        {
            request.CookieContainer = cookies;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; uk; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)";
            request.KeepAlive = true;
            request.Timeout = 120000;
            request.Method = "POST";
            request.Referer = url;
            request.ContentType = "application/x-www-form-urlencoded";
        }

        private void ShowResponse(HttpWebRequest request)
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            responseTextBox.Text = (((HttpWebResponse)response).StatusDescription);
            responseTextBox.Text += "\r\n";
            StreamReader reader = new StreamReader(response.GetResponseStream());
            responseTextBox.Text += reader.ReadToEnd();
        }

        private static void SetRequestData(HttpWebRequest request, string data)
        {
            byte[] streamData = Encoding.ASCII.GetBytes(data);
            request.ContentLength = streamData.Length;

            Stream dataStream = request.GetRequestStream();
            dataStream.Write(streamData, 0, streamData.Length);
            dataStream.Close();
        }

但不幸的是,我只得到登录页面的 HTML 源代码,并且 cookie 似乎不包含会话 ID。我在该代码之后执行的所有请求也会返回登录页面的 HTML 源代码,因此我可以假设它没有正确登录。

有人可以帮我解决这个问题或提供工作示例吗?


我想要实现的主要目标是在 WordPress 的 Nextgen Gallery 插件中扫描新图像。有 XML-RPC 方法可以做到这一点吗?

提前致谢。


由于 WordPress 实现了重定向,因此离开页面(重定向)会阻止 Web 请求获取正确的 Cookie。

为了获得相关的cookie,必须防止重定向。

request.AllowAutoRedirect = false;

而不是使用 cookie 容器进行登录。

看下面的代码: (基于 Albahari 的 C# 书中的示例)

        string loginUri = "http://www.someaddress.com/wp-login.php";
        string username = "username";
        string password = "pass";
        string reqString = "log=" + username + "&pwd=" + password;
        byte[] requestData = Encoding.UTF8.GetBytes(reqString);

        CookieContainer cc = new CookieContainer();
        var request = (HttpWebRequest)WebRequest.Create(loginUri);
        request.Proxy = null;
        request.AllowAutoRedirect = false;
        request.CookieContainer = cc;
        request.Method = "post";

        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = requestData.Length;
        using (Stream s = request.GetRequestStream())
            s.Write(requestData, 0, requestData.Length);

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            foreach (Cookie c in response.Cookies)
                Console.WriteLine(c.Name + " = " + c.Value);
        }

        string newloginUri = "http://www.someaddress.com/private/";
        HttpWebRequest newrequest = (HttpWebRequest)WebRequest.Create(newloginUri);
        newrequest.Proxy = null;
        newrequest.CookieContainer = cc;
        using (HttpWebResponse newresponse = (HttpWebResponse)newrequest.GetResponse())
        using (Stream resSteam = newresponse.GetResponseStream())
        using (StreamReader sr = new StreamReader(resSteam))
            File.WriteAllText("private.html", sr.ReadToEnd());
        System.Diagnostics.Process.Start("private.html");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式登录 WordPress? 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 在 WordPress 和 woocommerce 中禁用 zxcvbn.min.js

    如您所知 zxcvbn min js 约为 400kb 并且默认在 WordPress 网站中加载 我想知道如何阻止加载此 JavaScript 库 因为我不想在我的网站中检查密码长度 将以下内容添加到主题的 function php 或自
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • 在 Google 地图上加载标记的自定义信息窗口时,iOS 应用程序冻结

    我正在尝试在 iOS 应用程序上的 Google 地图标记上实现自定义信息窗口 正如所做的那样here and here例如 我创建了一个 xib 和一个UIView为它上课 它被称为CustomInfoWindow xib班级是Custo
  • C#与Excel互操作问题,保存excel文件不流畅

    我可以打开并写入 Excel 文件 但是当我尝试通过传递路径来保存文件时 保存操作会提示 保存 对话框 我期待它能够完全将文件保存在指定路径 代码如下 excelApp Save exportToDirectory excelApp Qui
  • C# 中的三元数受到限制有什么充分的理由吗?

    Fails object o 1 2 1 test 成功 object o if 1 2 o 1 else o test 第一条语句的错误是 无法确定条件表达式的类型 因为 int 和 string 之间没有隐式转换 为什么需要这样 我将这
  • 将本地 Git 存储库从 IDE 迁移到 Visual Studio Online

    我在 Visual Studio Online 上创建了一个新的团队项目 已在 Visual Studio 2013 中连接到该项目 使用 IDE 我将本地 Git 存储库 从 GitHub 上拉下来 克隆到本地 Git 存储库部分 当我浏
  • 直接从字节数组裁剪图像

    我有一个字节数组 其中包含一个图像 我想将其保存为裁剪后的 我的工作方法是 获取字节 使用 BitmapFactory decodebytearray 将其转换为位图 使用 createbitmap sourceBitmap x1 y1 w
  • 在 SQL Server 2005 中创建新的数据库用户

    如何在sql server 2005中创建一个带有密码的新数据库用户 我需要在连接字符串中使用此用户 密码 例如 uid user pwd password CREATE LOGIN user WITH PASSWORD password
  • Python 将 Adblock 与 Selenium 和 Firefox Webdriver 结合使用

    我的目标是通过 Python 将 Adblock Plus 与 Selenium 结合使用 我已经能够将其加载到加载扩展程序的位置 但默认情况下它不包含默认过滤器 EasyList 这是我到目前为止所拥有的 from selenium im
  • 比较两个通用数字的值

    我想与两种类型的变量进行比较T extends Number 现在我想知道两个变量中哪个大于另一个或相等 不幸的是我还不知道确切的类型 我只知道它将是java lang Number 我怎样才能做到这一点 EDIT 我尝试了另一种解决方法T
  • 从 docker 注册表 v2 中删除镜像

    Docker Registry v2 有一个 API 端点来删除镜像 DELETE v2
  • 将 R 文件转换为缺少字符串值的 Stata

    我在将 R 文件转换为 Stata 格式时遇到错误 我能够将数字转换为 Stata 文件 但当我包含字符串时 出现以下错误 library foreign write dta newdata X dta Error in write dta
  • 有没有一种规范的方法可以从特定的原子命名空间中获取所有标识?

    说我有 user name and user gender作为原子模式安装 pprint d q find ident where e db ident ident db install attribute e d db conn 找到所有
  • 创建文件,但如果名称存在则添加编号

    Python 是否有任何内置功能可以在文件名已存在的情况下向其添加数字 我的想法是 它会像某些操作系统的工作方式一样工作 如果一个文件输出到已经存在该名称的文件的目录 它将附加一个数字或递增它 即 如果 file pdf 存在 它将创建 f
  • 使用jquery获取按钮点击时元素的id

    我有动态生成的按钮列表 并且 id 是在运行时生成的 如何使用 JQuery 获取单击按钮的 id 这是js代码 var btn
  • SQLite 和存储图像

    我想知道哪种方式更好地将图像存储在内存中 Storing images as BLOB in DB or 仅将图像保存到文件并存储path到数据库中 什么方式效率更高 我认为存储文件的路径需要更多操作 因为我们需要引用数据库 然后引用文件
  • 在哪里可以找到 Windows API 常量列表

    每次我与 user32 dll 等 dll 交互时 我都需要 MF REMOVE 等常量 是否有所有这些常量的概述或常量所有这些常量的 C 库 您将在 win32 API 的 C 标头中找到所有常量 获取此信息的低技术方法是简单地在 Vis
  • 为什么 `lein uberjar` 计算用 `def` 定义的变量?

    我试图在创建时理解 Lieningen 行为uberjar 以下是重现该行为的最小示例 ns my stuff core gen class def some var throw Exception boom defn main args
  • 如何避免 selenium webdriver 的套接字超时?

    我有一个复杂的 python selenium 测试套件来测试非公共网页 在该设置中 我需要获取网络驱动程序 如下所示 self driver webdriver Firefox firefox profile profile log pa
  • Final 类中的 Powermock 静态 Final 方法

    我正在编写的测试用例 public class AClassUnderTest This test class has a method call public Long methodUnderTest Uses the FinalUtil
  • 水晶报表打印空白页

    我有一个水晶报告 它正在打印空白页并打印报告 但只是带有这个附加页 完成我的研究 勾选 取消勾选并将正确的公式添加到 新页面之后 选项中 而不是最后一个记录公式等 但它仍然打印空白页 这是我的部分专家详细信息 报告标题 勾选 自由格式 灰色
  • 如何以编程方式登录 WordPress?

    我需要以编程方式在 WordPress 管理面板中执行一些操作 但无法管理如何使用 C 和 HttpWebRequest 登录 WordPress 这是我所做的 private void button1 Click object sende