1

我的卷曲很有效并且非常简单:

卷曲 -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

我正在尝试在 ruby​​ on rails 中使用 Net::HTTP 来做到这一点,我有这个:

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 永远不会那样做。

关于什么不匹配的任何提示?

4

1 回答 1

1

看起来远程服务器不喜欢 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 课程表——搜索课程”

于 2013-04-03T00:39:30.993 回答