繁体   English   中英

Ruby on Rails-从curl创建Net :: HTTP请求

[英]Ruby on Rails - Create Net::HTTP request from curl

我拥有的卷发非常简单:

卷曲-d

“学期= 20141夏季+ 2013 +++++++++++++++++++++++++++++++&courseid =&subject = IT ++ INFORMATION + TECHNOLOGY&college =&campus = 1% 2C2%2C3%2C4%2C5%2C6%2C7%2C9%2CA%2CB%2CC%2CI%2CL%2CM%2CN%2CP%2CQ%2CR%2CS%2CT%2CW%2CU%2CV%2CX%2CZ&courselevel =&coursenum = &startTime = 0600&endTime = 2359&days = ALL&All = All + Sections” http://www3.mnsu.edu/courses/selectform.asp

我正在尝试使用Net :: HTTP在Rails的ruby中做到这一点,我有这个:

uri = URI.parse("http://www3.mnsu.edu/courses/selectform.asp")
params = {"semester" => "20141Summer+2013+++++++++++++++++++++++++++++", 
          "subject" => "IT++INFORMATION+TECHNOLOGY",
          "campus" => "1%2C2%2C3%2C4%2C5%2C6%2C7%2C9%2CA%2CB%2CC%2CI%2CL%2CM%2CN%2CP%2CQ%2CR%2CS%2CT%2CW%2CU%2CV%2CX%2CZ",
          "startTime" => "0600",
          "endTime" => "2359",
          "days" => "ALL",
          "ALL" => "All+Sections"}

#=====  FORM POST  =====#
@response = Net::HTTP.post_form(uri, params)

但是,每次运行时,它都会返回“ Microsoft VBScript运行时错误800a0009”。curl从不执行此操作。

有什么不匹配的提示吗?

看起来远程服务器不喜欢Ruby的用户代理。 有两种解决方法:

#1修改Net :: HTTP的用户代理:

require 'net/http'
params = {"semester" => "20141Summer+2013+++++++++++++++++++++++++++++", 
    "subject" => "IT++INFORMATION+TECHNOLOGY",
    "campus" => "1%2C2%2C3%2C4%2C5%2C6%2C7%2C9%2CA%2CB%2CC%2CI%2CL%2CM%2CN%2CP%2CQ%2CR%2CS%2CT%2CW%2CU%2CV%2CX%2CZ",
    "startTime" => "0600",
    "endTime" => "2359",
    "days" => "ALL",
    "ALL" => "All+Sections"}

uri = URI.parse("http://www3.mnsu.edu/courses/selectform.asp")
url = uri.to_s + "?" + URI.encode_www_form(params)

req = Net::HTTP::Get.new(url)
req['User-Agent'] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22"

res = Net::HTTP.start(uri.hostname, uri.port) {|http| http.request(req) }

此方法有效,但会给您“ 302对象已移动”消息,您必须手动遵循。

#2使用机械化宝石

require 'rubygems'
require 'mechanize'
@agent = Mechanize.new
@agent.user_agent_alias = 'Mac Safari'
page = @agent.get 'http://www3.mnsu.edu/courses/selectform.asp?semester=20141Summer+2013+++++++++++++++++++++++++++++&courseid=&subject=IT++INFORMATION+TECHNOLOGY&college=&campus=1%2C2%2C3%2C4%2C5%2C6%2C7%2C9%2CA%2CB%2CC%2CI%2CL%2CM%2CN%2CP%2CQ%2CR%2CS%2CT%2CW%2CU%2CV%2CX%2CZ&courselevel=&coursenum=&startTime=0600&endTime=2359&days=ALL&All=All+Sections'

这将使您进入“ MSU课程表-搜索课程”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM