用于登录表单的 Ruby RestClient.post

2024-02-04

我正在尝试使用以下代码登录网站:

require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'csv'
require 'restclient'

HEADERS_HASH = {"User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.5 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.4"}

page = Nokogiri::HTML(open("http://example.com/login", HEADERS_HASH))

token = page.css("form.login_box div input")[0]['value']

login_resp = RestClient.post("https://example.com/session", {"authenticity_token" => token, "login" => 'username', "password" => 'password', "remember_me" => 1, 'commit' => 'Sign In'})

但我收到以下错误:

/usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:39:in `return!': 302 Found (RestClient::Found)
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in `process_result'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/net/http.rb:745:in `start'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient.rb:72:in `post'
    from btw.rb:13:in `<main>'

我不确定这个错误告诉我什么?有什么建议吗?

这是表单代码:

<form action="https://example.com/session" class="login_box" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="Vfv9VpDzV2A4Bcgm8III8Gjhf/+GDe1EO7/3qIg+q6I="></div>
  <div style="padding:20px;">
  <fieldset>
    <label for="login">Email</label>
    <input id="login" name="login" size="40" tabindex="1" type="text" style="background-image: url(data:image/gif;base64,R0lGODlhEAAQAMQAAHgAFq9RZp8BJfT09JkCJKUuSO/q6/n//vHh5YYBGvf6+tOyucB0hsuLmpUiOpIAHIgJJtzFy7pneuvT2fP49/Dw8L5/juS+x8Scpn4BHaMDJ3cAHHQAG6YDKHEAGv///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjEgNjQuMTQwOTQ5LCAyMDEwLzEyLzA3LTEwOjU3OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkZCN0YxMTc0MDcyMDY4MTFCRURDRjg2RUEzOUI0MjBEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUyQjY0RUJGQTQ2QzExRTA5MkM2OTcwNjIwMUM1QjhFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUyQjY0RUJFQTQ2QzExRTA5MkM2OTcwNjIwMUM1QjhFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkE3RjExNzQwNzIwNjgxMTkyQjA4Nzg0MUEyMjBGMUUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkI3RjExNzQwNzIwNjgxMUJFRENGODZFQTM5QjQyMEQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQAAAAAACwAAAAAEAAQAAAFmGAnjmTZaSgqCCqbautKdMVaOEQsEDkRTAjN44IIyHi8R+DzYRSYjAcy+Ug0PojJZ/HoUh2BgGRwOCga4UK3uiwP3mSmJVFNBBQVQwWuVzASgAkQDmAVFIcShBCAGY0ZAAsHEZEREACOjgABBxQBDhUHFpeNG6UcDhgLHgCpBQClsKUeHBAeGxkctrAcvL2zub2+HsPExcYhADs=); padding-right: 18px; background-attachment: scroll; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(192, 31, 47); border-right-color: rgb(192, 31, 47); border-bottom-color: rgb(192, 31, 47); border-left-color: rgb(192, 31, 47); width: 288px; background-position: 100% 50%; background-repeat: no-repeat no-repeat; ">
  </fieldset>
  <fieldset>
    <label for="password">Password</label>
    <input id="password" name="password" size="40" tabindex="2" type="password" style="background-image: url(data:image/gif;base64,R0lGODlhEAAQAMQAAHgAFq9RZp8BJfT09JkCJKUuSO/q6/n//vHh5YYBGvf6+tOyucB0hsuLmpUiOpIAHIgJJtzFy7pneuvT2fP49/Dw8L5/juS+x8Scpn4BHaMDJ3cAHHQAG6YDKHEAGv///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjEgNjQuMTQwOTQ5LCAyMDEwLzEyLzA3LTEwOjU3OjAxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOkZCN0YxMTc0MDcyMDY4MTFCRURDRjg2RUEzOUI0MjBEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjUyQjY0RUJGQTQ2QzExRTA5MkM2OTcwNjIwMUM1QjhFIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUyQjY0RUJFQTQ2QzExRTA5MkM2OTcwNjIwMUM1QjhFIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RkE3RjExNzQwNzIwNjgxMTkyQjA4Nzg0MUEyMjBGMUUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkI3RjExNzQwNzIwNjgxMUJFRENGODZFQTM5QjQyMEQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQAAAAAACwAAAAAEAAQAAAFmGAnjmTZaSgqCCqbautKdMVaOEQsEDkRTAjN44IIyHi8R+DzYRSYjAcy+Ug0PojJZ/HoUh2BgGRwOCga4UK3uiwP3mSmJVFNBBQVQwWuVzASgAkQDmAVFIcShBCAGY0ZAAsHEZEREACOjgABBxQBDhUHFpeNG6UcDhgLHgCpBQClsKUeHBAeGxkctrAcvL2zub2+HsPExcYhADs=); padding-right: 18px; background-attachment: scroll; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(192, 31, 47); border-right-color: rgb(192, 31, 47); border-bottom-color: rgb(192, 31, 47); border-left-color: rgb(192, 31, 47); width: 288px; background-position: 100% 50%; background-repeat: no-repeat no-repeat; ">
    <a href="/forgot_password">Forgot?</a>
  </fieldset>
  <fieldset class="remember_me">
    <input id="remember_me" name="remember_me" tabindex="3" type="checkbox" value="1">
    <label for="remember_me">Remember Me</label>
  </fieldset>
  <input class="login_button" name="commit" tabindex="4" type="submit" value="Sign In">
  </div>
</form>

你有一个302重定向 http://en.wikipedia.org/wiki/HTTP_302响应您的 POST 请求。 RestClient 不处理 POST 上的重定向,因此它会引发异常。您需要在代码中处理此异常,以便您可以弄清楚响应是什么或它被重定向到哪里。

See the RestClient 文档在这里 https://github.com/rest-client/rest-client#exceptions-see-wwww3orgprotocolsrfc2616rfc2616-sec10html了解更多信息。

你也可以使用这里描述的块形式 https://github.com/rest-client/rest-client#result-handling,这似乎不会引发 POST 302 重定向的异常,并允许您直接在块内处理它:

# Follow redirections for all request types and not only for get and head
#
# RFC : "If the 301, 302 or 307 status code is received in response to a 
# request other than GET or HEAD, the user agent MUST NOT automatically 
# redirect the request unless it can be confirmed by the user, since this 
# might change the conditions under which the request was issued."
RestClient.get('http://my-rest-service.com/resource'){ |response, request, result, &block|
  if [301, 302, 307].include? response.code
    response.follow_redirection(request, result, &block)
  else
    response.return!(request, result, &block)
  end
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于登录表单的 Ruby RestClient.post 的相关文章

随机推荐

  • 如何获取 .NET 中的资源监视器值?

    我需要获取 Windows 7 资源监视器中的一些值 特别是每个进程的内存使用情况 CPU 和带宽 我研究了 PerformanceCounter 类 但没有找到深入到进程级别的方法 资源监视器正是我正在寻找的东西 在你问之前 我知道这是重
  • raise StopIteration 和生成器中的 return 语句有什么区别?

    我很好奇使用之间的区别raise StopIteration and a return生成器中的语句 例如 这两个函数有什么区别吗 def my generator0 n for i in range n yield i if i gt 5
  • 安装 pydev 时出错[重复]

    这个问题在这里已经有答案了 我安装了 eclipse 3 7 并且想从 help gt install new software 从 pydev org updates 安装 pydev 但我不断收到错误 An error occurred
  • Python描述符与属性[重复]

    这个问题在这里已经有答案了 我对何时使用属性和描述符感到困惑 我读到属性是一个专门的描述符 有人可以发布这是如何工作的吗 您应该阅读有关描述符实际是什么的文档 Cliff s Notes 版本 描述符是一种低级机制 可让您挂钩正在访问的对象
  • Rails 5 资产未在生产中加载

    我最近更新了 Rails 应用程序中的一些软件包 但现在我的资产无法提供服务 相反 我收到以下错误 Failed to load resource the server responded with a status of 404 Not
  • 制作 VB-dll 并将其加载到 C++ 应用程序中

    我有一个问题已经困扰了整整一周 但我自己无法解决 我一直在谷歌搜索 并在各种论坛中搜索 我发现了很多 这可能有用 尝试过 但没有 没有成功 如果有人有任何线索 请帮助我 我从外部源获得了许多用 VB 编写的类和函数 我需要能够在 C 应用程
  • 从文件中读取特殊字符 - Java

    我正在从具有以下属性的文本文件中读取数据 编码 ANSI文件类型 电脑 现在 该文件包含许多特殊字符 例如度数符号 等 我正在使用以下代码读取该文件 File file new File C X Y SpecialCharacter txt
  • OpenCV VideoCapture 从视频中删除 Alpha 通道

    我有带有 Alpha 通道的视频 我尝试将其放置在另一个视频上 如下所示 public static void overlayImage Mat background Mat foreground Mat output Point loca
  • Javascript Date 对象返回 1969 年 12 月 31 日

    If you are using a date in the form of milliseconds does it need to be converted to a string in order for the Date objec
  • Python 多处理进程无声地崩溃

    我正在使用Python 2 7 3 我使用子类化了一些代码multiprocessing Process对象 如果我的子类 Process 对象中的代码没有错误 则一切运行正常 但是 如果我的子类 Process 对象中的代码存在错误 它们
  • 美化 NSArray 和 NSDictionary 的 NSLog

    我正在处理深度嵌套的 NSArray 和 NSDictionary 至少可以说这是非常耗时的 data objectatindex 0 valueForKey blah 等等 有谁知道一个很好的 iOS 类别来递归记录结构 突出显示类型并显
  • 我可以直接使用 CLion 调试库 (DLL) 吗?

    我正在使用 CLion IDE 处理多个 CMake 项目 这些项目以库作为输出目标 在我的特殊情况下是 DLL 因为我在 Windows 上 现在 直接调试 运行某些方法将非常方便 例如使用使用 CLion 的配置 这可能吗 如果没有 调
  • Android 11 - ROOT:挂载 /system 失败,在 /proc/system 中找不到

    我的操作系统是 PixysOS Android 11 当我做 mount o rw remount system 它失败了 mount system not in proc mounts 但通常它是有效的 我也在android 9中测试过
  • Gson Java 保留关键字

    我有一些 JSON 我正在使用 Gson 反序列化 resp posts public true 我的问题是public是一个Java关键字 那么我如何在我的类中创建一个与publicJSON 中的字段 您可以使用 gson 为您的字段使用
  • 如何在 docker-compose 中运行多个 JVM 参数?

    我从以下答案中得到了 JVM 参数列表https stackoverflow com a 35108974 7809534 https stackoverflow com a 35108974 7809534 Dcom sun manage
  • android NDK 可能实现最快的 2D 帧速率,我的尝试包括在内,有更好的选择吗?

    android NDK 可能实现最快的 2D 帧速率 我的尝试包括在内 有更好的选择吗 我使用 NDK 和 OpenGL ES 2 0 将帧显示为 GL TRIANGLE STRIP 上的纹理 这是在 HTC Desire 上完成的 其硬件
  • 如何检测Android平板电脑中充当USB Host的USB设备?

    我尝试在代码的帮助下开发一个示例应用程序开发者 android com http developer android com guide topics connectivity usb host html 我的代码看起来像这样 public
  • Android - 运行 jarSigner 后是否需要运行 zipAlign?

    我刚刚成功签署了一个 Android 应用程序 我正在尝试重新发布到商店 我不记得是否必须在 jarSigner 之后运行 zipAlign 或者运行 jarSigner 后我一切都好 我正在看这里 http developer andro
  • 当用户“滑出”viewpager 片段时运行代码?

    我需要检测用户何时从我的片段之一滑入和滑出 我尝试了 onPause 但似乎应用程序在滑到相邻屏幕时没有暂停 当将两个屏幕移开时它会被破坏 如果可能的话 我想从片段本身执行此操作 因为我正在动态更改片段 并且某些代码仅在存在某个片段时才有用
  • 用于登录表单的 Ruby RestClient.post

    我正在尝试使用以下代码登录网站 require rubygems require nokogiri require open uri require csv require restclient HEADERS HASH User Agen