标签: net-http

ruby-openid:执行发现时未设置@socket

我与omniauth/openid有点混乱.

在尝试进行身份验证时,我在日志中发现了这一点:

OpenID::FetchingError: Error fetching https://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username: undefined method `io' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

重要的是undefined method io' for nil:NilClass来自openid/fetchers.rb,在下面的代码片段中:

module Net
class HTTP
def post_connection_check(hostname)
  check_common_name = true
  cert = @socket.io.peer_cert
  cert.extensions.each { |ext|
    next if ext.oid != "subjectAltName"
    ext.value.split(/,\s+/).each{ |general_name|
      if /\ADNS:(.*)/ =~ general_name
        check_common_name = false
...
Run Code Online (Sandbox Code Playgroud)

该错误是由@socket.io.peer_cert@socket未定义生成的.

你们有没有遇到过这个?不太确定原因是什么.

我正在运行的版本:

  • ruby 1.9.3dev(2010-08-17 trunk 29020)[x86_64-darwin10.4.0]
  • ruby-openid(2.1.8)
  • ruby-openid-apps-discovery(1.2.0)
  • omn​​iauth 0.2.0

ruby ruby-openid omniauth net-http

5
推荐指数
1
解决办法
292
查看次数

在发出请求之前从Ruby Net :: HTTP请求获取标头

在Ruby中,如何在实际发出请求之前,掌握将由net / http或open-uri请求发送的HTTP请求标头。

在某些情况下,在URI中创建签名字符串时会使用标头。当然,有一些方法可以获取将发送的请求标头。例如,这些应包括“ Host:”标题。

ruby open-uri net-http

5
推荐指数
2
解决办法
5612
查看次数

如何通过POST发送多个相同的键/参数?

如果我必须在HTTP请求中发送一堆post参数,所有这些参数都具有相同的名称,我该如何构造data要发布的对象?

想象一个带有一些复选框的表单,它们都具有相同的name属性但具有不同的值(如果它们被选中):

<input name="color" value="red"/>
<input name="color" value="green"/>
<input name="color" value="blue"/>
Run Code Online (Sandbox Code Playgroud)

我想在ruby中构造它(但它需要根据表单上选择的内容动态创建):

data = {
    "color" => "red",
    "color" => "green",
    "color" => "blue"
}
Run Code Online (Sandbox Code Playgroud)

然后将数据发送到某个URL:

Net::HTTP.post_form(url, data)
Run Code Online (Sandbox Code Playgroud)

我无法控制接收端,因此我必须按预期接收它们发送参数.怎么样?

ruby ruby-on-rails net-http

5
推荐指数
2
解决办法
4815
查看次数

使用Net :: HTTP抛出Net :: HTTPBadResponse错误的API调用

我正在开发rails环境.我正在使用Net :: HTTP模块来调用外部API并获得响应.这在我当地的主机上工作正常.但是在暂存它时会抛出Net :: HTTPBadResponse错误.我的暂存是启用SSL的.这是不同的.提供下面的代码段和错误.

parameters = {'VirtualNumber' => '09845xxxxxx','Number[]' => "09878xxxxxx" }
x = Net::HTTP.post_form(URI.parse("https://example.com"), parameters)

Error:
Net::HTTPBadResponse (wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">")
Run Code Online (Sandbox Code Playgroud)

成功的结果将是XML格式.任何人都可以帮我解决这个问题.

谢谢,
问候

ssl ruby-on-rails net-http

5
推荐指数
1
解决办法
2116
查看次数

如果IF条件变为真,我如何跳过迭代,并转到do ... end的第一行?

我写了以下代码:

require 'net/http'
require 'uri'
require 'IPAddr'
require 'timeout'
require 'Resolv'
require 'open-uri'

#puts "Origin IP:\n\n"
#originip = gets()
(IPAddr.new("209.85.175.120")..IPAddr.new("209.85.175.150")).each do |address|
  uri = URI("http://#{address.to_s}")
  puts "#{uri}"
  http = Net::HTTP.new(uri.host, uri.port)
  puts "#{http}"
  Net::HTTP.start(uri.host, uri.port) do |http|
    request = Net::HTTP::Get.new uri.request_uri
    response = http.request request
    if response.code == "301" || response.code == "400" then

    end
    #request.initialize_http_header({"Origin" => "#{originip}"})
  end
Run Code Online (Sandbox Code Playgroud)

是否有可能uri = URI("http://#{address.to_s}")在我的if条件下排队

if response.code == "301" || response.code == "400" then
 # condition
end
Run Code Online (Sandbox Code Playgroud)

在上面的代码变成了真的吗?如果条件成立,我怎样才能转到下一个IP地址并跳过当前的IP地址?

是否可以 …

ruby label goto net-http

4
推荐指数
2
解决办法
1万
查看次数

ruby net/http开放连接很慢

当我net/http在开发中工作时,它非常慢.我已经安装了net-http-spygem以获取有关每个请求的一些信息,我发现"打开连接"部分占用的时间最多(超过10秒).此外,它不会使连接保持活动状态,因此需要在每次请求时重新打开它.

opening connection to maps.google.com...
# ~10 seconds
opened
Run Code Online (Sandbox Code Playgroud)

有什么方法可以net/http通过设置一些默认值来以某种方式提高库的性能?我不想要一个特定于请求的修复,但是需要一些可以解决全局问题的方法.我正在使用geokitgem在curent项目中,我不能改变它在内部处理请求的方式,除了知道它正在使用net/http,并且它在生产(Heroku)上工作得很好但在开发中非常慢.

我在Mac OS X Lion上使用ruby 1.9.2-p290.使用rbenv安装和管理Ruby.


以下是示例代码:

require 'net/http'
require 'uri'

time = Time.now.to_i
uri = URI.parse("http://maps.google.com/maps/geo?q=Chicago&output=xml&oe=utf-8")

Net::HTTP.get(uri)
puts (Time.now.to_i - time)

Net::HTTP.get(uri)
puts (Time.now.to_i - time)
Run Code Online (Sandbox Code Playgroud)

我放在哪里的URL并不重要.每个请求总是需要10秒钟.

ruby net-http

4
推荐指数
2
解决办法
5105
查看次数

Ruby 异步网络::HTTP?

是否Net::HTTP支持异步语法?

我正在寻找类似下面代码的东西。

Net::HTTP收到来自服务器的响应(在这种情况下errornil)或连接到服务器时遇到错误(在这种情况下responsenil)后,该块将在主线程上被调用。

Net::HTTP.get('http://stackoverflow.com') do |response, error|
  if error
    puts "Connection error: #{error.message}"
  elsif response.status_code != HTTPOK
    puts "Unexpected status code: #{response.status_code}"
    puts response.body
  else
    puts "Success!"
    puts response.body
  end
end
Run Code Online (Sandbox Code Playgroud)

以下问题提供了答案,但我正在寻找基于块的解决方案。

ruby asynchronous block net-http

4
推荐指数
1
解决办法
3029
查看次数

将 `Authorization Bearer` 哈希添加到 Net::HTTP 发布请求 (Ruby)

如何添加Authorization Bearer到 POST 请求中Net::HTTP

我只能在文档中找到“基本身份验证”的帮助。

req.basic_auth 'user', 'pass'
Run Code Online (Sandbox Code Playgroud)

来源:https : //docs.ruby-lang.org/en/2.0.0/Net/HTTP.html#class-Net :: HTTP-label-Basic+Authentication

我正在尝试复制一个看起来像的卷曲:

> curl 'http://localhost:8080/places' -d '{"_json":[{"uuid":"0514b...",
> "name":"Athens"}]}' -X POST -H 'Content-Type: application/json' -H
> 'Authorization: Bearer eyJ0eXAiO...'
Run Code Online (Sandbox Code Playgroud)

目前我已经到了:

require 'net/http'
require 'net/https'
require 'uri'

uri = URI('http://localhost:8080/places')

res = Net::HTTP.post_form(uri, '_json' => [{'uuid': '0514b...', 'name':'Athens'}])
Run Code Online (Sandbox Code Playgroud)

但是我在弄清楚如何添加Authentication: Bearer...零件时遇到了麻烦。

有任何人对此有经验吗?

ruby curl net-http

4
推荐指数
1
解决办法
6929
查看次数

如何在 golang net/http 中使用传输添加标头信息

我正在尝试通过创建 Trasport 来控制 keep-alives 会话以重用 tcp 连接。

这是我的代码段,我不确定如何添加用于身份验证的标头信息。

url := "http://localhost:8181/api/v1/resource"
tr := &http.Transport{
    DisableKeepAlives:   false,
    MaxIdleConns:        0,
    MaxIdleConnsPerHost: 0,
    IdleConnTimeout:     time.Second * 10,
}
client := &http.Client{Transport: tr}
resp, err := client.Get(url)
Run Code Online (Sandbox Code Playgroud)

go transport net-http

4
推荐指数
2
解决办法
5501
查看次数

Ruby 2.7.4 网络持续警告

ruby在 a 中crontab以及在终端中手动运行脚本时,我收到重复的警告。

/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:208: warning: previous definition of BUFSIZE was here
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/2.7.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/Users/rich/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/net-protocol-0.1.2/lib/net/protocol.rb:504: warning: previous definition of Socket was here
Run Code Online (Sandbox Code Playgroud)

我已将脚本更改为 usenet/httpFaraday,我假设后者需要第一个。最近和很久以前就看到过这种行为,这是宝石的重新加载,如果我是正确的,net这是宝石的一部分。core我只是不确定为什么要重新加载。

由于几个原因,我习惯于rbenv兼顾版本,这一点不会改变。ruby我的 shebang 是,#!/Users/rich/.rbenv/shims/ruby但我的ruby版本有点不同:

$ which ruby
==> /Users/rich/.rbenv/versions/2.7.4/bin/ruby

$ ruby -v
==> Ruby version: …
Run Code Online (Sandbox Code Playgroud)

ruby net-http rbenv

4
推荐指数
1
解决办法
2159
查看次数