WP-API 和 Net::Http 的身份验证问题

Authentication Issue with WP-API and Net::Http

我是 Wordpress 新手。我想访问 WP-API 以使用 REST API 创建一个 post。我无法执行 POST、PUT 和 Delete 请求。虽然我只能检索数据。我为此写了一个 ruby 脚本。下面是我的代码片段。

require 'net/http'
require 'net/http/oauth'
require 'json'

class CollectScript
  def initialize
    uri = URI.parse('http://vagrant.local/wp-json/wp/v2/posts')
    http = Net::HTTP.new(uri.host, uri.port)
    req = Net::HTTP::Post.new(uri.request_uri)
    req.basic_auth("admin", "password")
    res = http.request(req)     
    puts res.body
  end
end
CollectScript.new

虽然 运行 上述代码出现以下错误:

{"status":"error","error":"You need to login with a user capable of creating posts."}

使用与 GET 请求相同的代码,我能够获得 posts JSON。但是对于 HTTP POST 请求,我需要通过身份验证。我也尝试过基本身份验证和 Oauth。但同样的结果。

谁能帮我解决身份验证问题。

wp-api gem 声称通过为 WP REST API 提供 ruby 包装器来做你想做的事。我不确定它是否(或如何)起作用,因为我自己还没有尝试过。至少它可以通过查看其源代码为您提供一些关于如何处理连接的指示。

具体来说,在 https://github.com/colinyoung/wp-api/blob/master/lib/wp/api/client.rb#L36 您可以看到作者如何在执行基本身份验证的同时检索资源 一步:

Client.get(path, basic_auth: { username: @user, password: @password })

请记住,此 gem 使用 HTTPartyClient.

提供 get 方法

我只是在我的 Wordpress 站点中安装了这个 basic_auth plugin

  • 首先,我从 this link
  • 下载 zip 文件
  • 现在将其解压到项目目录中的 /content/plugins 文件夹中
  • 从您的 wp-admin 界面激活此插件。
  • 现在我使用下面的代码片段进行身份验证

    uri = URI.parse("http://vagrant.local/wp-json/wp/v2/posts")
    http = Net::HTTP.new(uri.host, uri.port)
    req = Net::HTTP::Post.new(uri.request_uri)
    req.basic_auth("admin", "password")
    req.set_form_data({title: "Another 11new post", status: "publish", content_raw: "this is the content of the post", excerpt_raw: "Excerpt", post_media: ['/uploads/rails.png']})
    res = http.request(req)   
    puts res.body
    

现在成功了。