我有一个URL,我正在使用HTTP GET将查询传递到页面.最新的味道(in net/http)会发生什么,该脚本不会超出302响应.我尝试了几种不同的解决方案; HTTPClient,net/http,Rest-Client,Patron ......
我需要一种方法来继续到最后一页,以验证页面html上的属性标记.重定向是由于移动用户代理点击重定向到移动视图的页面,因此标题中的移动用户代理.这是我今天的代码:
require 'uri'
require 'net/http'
class Check_Get_Page
def more_http
url = URI.parse('my_url')
req, data = Net::HTTP::Get.new(url.path, {
'User-Agent' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5'
})
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
cookie = res.response['set-cookie']
puts 'Body = ' + res.body
puts 'Message = ' + res.message
puts 'Code = ' + res.code
puts "Cookie \n" + cookie
end
end …Run Code Online (Sandbox Code Playgroud) 下面的代码产生以下错误:OpenSSL :: SSL :: SSLError:SSL_connect SYSCALL返回= 5 errno = 0状态= SSLv3读取服务器问候A
require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = 'SSLv3'
http.get(uri.request_uri)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?我尝试了所有其他问题中提到的一切,但仍然没有运气.
更新我
尝试以下方法:
更新II
仍然没有运气.
更新III
好的,这是最终的代码 - 感谢Steffen(见下面的答案):
require 'net/https'
uri = URI.parse("https://<server>.com")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.ssl_version = :TLSv1
http.ciphers = ['RC4-SHA']
http.get(uri.request_uri)
Run Code Online (Sandbox Code Playgroud)
我怀疑我的问题与其他人有关,因为它与远程配置错误的服务器有关.
我已经找到了用于下载图像文件的NET :: HTTP的好例子,我发现了创建临时文件的很好例子.但我不知道如何将这些库一起使用.即,如何在下载二进制文件的代码中创建临时文件?
require 'net/http'
Net::HTTP.start("somedomain.net/") do |http|
resp = http.get("/flv/sample/sample.flv")
open("sample.flv", "wb") do |file|
file.write(resp.body)
end
end
puts "Done."
Run Code Online (Sandbox Code Playgroud) 看起来这两个宝石都执行非常相似的任务.任何人都可以举例说明一个宝石比另一宝石更有用吗?我没有具体的代码,我更想知道每个gem的一般用例.我知道这是一个简短的问题,我会根据要求填写空白.谢谢.
我的任务是通过自动化测试URL上的不同用户代理.我正在使用ruby进行编码,我一直在尝试使用以下方法设置用户代理,但它似乎无法识别用户代理.
@http = Net::HTTP.new(URL)
response = @http.request_get(URL, {'User-Agent' => useragent})
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点,或者我做错了什么?
我需要将JSON中的数据发送到在同一台计算机上运行的另一个应用程序.
我这样发送请求(rails 3.2.13)
data = { //some data hash }
url = URI.parse('http://localhost:6379/api/plans')
resp, data = Net::HTTP.post_form(url, data.to_JSON )
p resp
p data
{ resp: resp, data: data.to_JSON }
Run Code Online (Sandbox Code Playgroud)
但是我得到了Net::HTTPBadResponse (wrong status line: "-ERR unknown command 'POST'"):
如何解决这个问题?
更新1将
我的代码更新为@ Raja-d建议
url = URI.parse('http://localhost:6379/v1/sessions')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
resp, data = Net::HTTP.post_form(url, data)
p resp
p data
Run Code Online (Sandbox Code Playgroud)
但我仍然得到错误 Net::HTTPBadResponse (wrong status line: "-ERR unknown command 'POST'"):
我正在尝试设置代理并在文档中的简单get请求中使用它.但我总是收到错误!地址和端口是正确的,它是开放的,它工作..它的
http://proxy:8080.
proxy_addr = 'proxy'
proxy_port = 8080
Net::HTTP.new('google.de', nil, proxy_addr, proxy_port).start { |http|
# always proxy via your.proxy.addr:8080
Net::HTTP.get('google.de', '')
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?谢谢你的回答!
我有以下Ruby代码,用于沙盒模式的跟踪网站:
require "net/http"
require "net/https"
require "uri"
xml = <<XML
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><data appname="dhl_entwicklerportal" language-code="de" password="Dhl_123!" request="get-status-for-public-user"><data piece-code="00340433836536550280"></data></data>
XML
uri = URI('https://cig.dhl.de/services/sandbox/rest/sendungsverfolgung')
nhttp = Net::HTTP.new(uri.host, uri.port)
nhttp.use_ssl=true
nhttp.verify_mode=OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri)
request.basic_auth 'xpackageWP', 'hidden'
response = nhttp.start {|http|
http.request(request, xml:xml)
}
puts response.body
Run Code Online (Sandbox Code Playgroud)
我总是得到错误:
d:/Ruby200/lib/ruby/2.0.0/net/http/generic_request.rb:179:in `send_request_with_body' undefined method `bytesize' for #<Hash:0x2954fe8> (NoMethodError)
from d:/Ruby200/lib/ruby/2.0.0/net/http/generic_request.rb:130:in `exec'
from d:/Ruby200/lib/ruby/2.0.0/net/http.rb:1404:in `block in transport_request'
from d:/Ruby200/lib/ruby/2.0.0/net/http.rb:1403:in `catch'
from d:/Ruby200/lib/ruby/2.0.0/net/http.rb:1403:in `transport_request'
from d:/Ruby200/lib/ruby/2.0.0/net/http.rb:1376:in `request'
from D:/Dropbox_5BHIF/Dropbox/TempDHL/Main.rb:17:in `block in <main>'
from d:/Ruby200/lib/ruby/2.0.0/net/http.rb:852:in `start'
from D:/Dropbox_5BHIF/Dropbox/TempDHL/Main.rb:16:in …Run Code Online (Sandbox Code Playgroud) 例如:
require 'net/http'
uri = URI('http://example.com/some_path?query=string')
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end
Run Code Online (Sandbox Code Playgroud)
什么是正确/擦除方式摆脱Net::HTTP?即HTTP::Get.new()或只是Get.new()
如果这是一个无耻的怀疑我提前道歉:我想在我的Ruby代码中使用代理来获取一些网页.而且我想偷偷摸摸!所以我正在使用Tor.
我有Tor运行,我可以像往常一样使用Net :: HTTP.get(uri).但我无法弄清楚如何使用Net :: HTTP :: Proxy来获取uri.我也无法弄清楚如何使用Tor来帮助我的匿名提取.
任何帮助是极大的赞赏.请不要只为Net :: HTTP :: Proxy添加ruby-doc页面的链接.如果我明白了,我不会在这里问这个:-)
另一种简单的方法是使用SOCKSify,但在这种情况下,我收到以下错误:
/usr/lib/ruby/gems/1.9.2-p290/gems/socksify-1.5.0/lib/socksify.rb:189:in 'socks_authenticate': SOCKS version not supported (SOCKSError)
我之前从未做过任何网络编程.任何关于此的指导也将非常有帮助.谢谢 :-)
net-http ×10
ruby ×10
proxy ×2
class ×1
curl ×1
gem ×1
http ×1
http-headers ×1
httpclient ×1
json ×1
module ×1
namespaces ×1
open-uri ×1
openssl ×1
post ×1
tor ×1
uri ×1
user-agent ×1