Tag: http

使用Ruby的Net:HTTP保留HTTP头中的大小写

虽然HTTP规范说标题不区分大小写; Paypal及其新的自适应支付API要求其标题区分大小写。 使用ActiveMerchant的paypal自适应支付扩​​展( http://github.com/lamp/paypal_adaptive_gateway )似乎虽然标题是全部大写的,但它们是以大小写forms发送的。 以下是发送HTTP请求的代码: headers = { “X-PAYPAL-REQUEST-DATA-FORMAT” => “XML”, “X-PAYPAL-RESPONSE-DATA-FORMAT” => “JSON”, “X-PAYPAL-SECURITY-USERID” => @config[:login], “X-PAYPAL-SECURITY-PASSWORD” => @config[:password], “X-PAYPAL-SECURITY-SIGNATURE” => @config[:signature], “X-PAYPAL-APPLICATION-ID” => @config[:appid] } build_url action request = Net::HTTP::Post.new(@url.path) request.body = @xml headers.each_pair { |k,v| request[k] = v } request.content_type = ‘text/xml’ proxy = Net::HTTP::Proxy(“127.0.0.1”, “60723”) server = proxy.new(@url.host, 443) server.use_ssl […]

Ruby OpenSSL嵌套了asn1错误

我已经在这里发布了几个问题的建议,但无济于事。 我有以下文件:(注意,我在运行中生成这些文件,它们是一次性钥匙) 证书文件: —–BEGIN CERTIFICATE—– MIIE+jCCA+KgAwIBAgIJAMLMeL/HH75vMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD VQQGEwJVUzENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx HjAcBgNVBAoTFU5pY2hvbGFzIFRlcnJ5IGRvdGNvbTEUMBIGA1UECxMLZGV2ZWxv cG1lbnQxFjAUBgNVBAMTDW5pY2hvbGFzdGVycnkxKTAnBgkqhkiG9w0BCQEWGm5p Y2hvbGFzQG5pY2hvbGFzdGVycnkuY29tMB4XDTE0MTIyNTA3MTkxNFoXDTE1MTIy NTA3MTkxNFowga4xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQH Ew5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVTmljaG9sYXMgVGVycnkgZG90Y29t MRQwEgYDVQQLEwtkZXZlbG9wbWVudDEWMBQGA1UEAxMNbmljaG9sYXN0ZXJyeTEp MCcGCSqGSIb3DQEJARYabmljaG9sYXNAbmljaG9sYXN0ZXJyeS5jb20wggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRA4sMOx8cn59h8xvE1EcwudGYgGID WixEEz+8UczLzoIovbZI//iExrwfM7edYRU/HyIufx+dvHj5bRABt5pOwgEiolDA XtIttxpsCX23gLg/40TQY2JXRv10JgxEQ3680ypghfAEXisOiIQGrT0W+k6WpIRo /+z4zh/UPqUmvV3ZnzG97jsFiQ0Nu8IKlByLWzoef+2MqG0GO95do3gCcBhAF3tm v+buNVi8DgJnYTnKKD5S1+KYRSkNNioRs3zE+/W0vCA0/kLiFjSjMq3bSuGJbHmt N/8+lodfZYh1HB6DRZoyfTynNDRHyKpPGqTvfp8U/E91kkpxusVSQFbrAgMBAAGj ggEXMIIBEzAdBgNVHQ4EFgQUPAm5VdPIPbdedLtCEmpivYi8xfkwgeMGA1UdIwSB 2zCB2IAUPAm5VdPIPbdedLtCEmpivYi8xfmhgbSkgbEwga4xCzAJBgNVBAYTAlVT MQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UE ChMVTmljaG9sYXMgVGVycnkgZG90Y29tMRQwEgYDVQQLEwtkZXZlbG9wbWVudDEW MBQGA1UEAxMNbmljaG9sYXN0ZXJyeTEpMCcGCSqGSIb3DQEJARYabmljaG9sYXNA bmljaG9sYXN0ZXJyeS5jb22CCQDCzHi/xx++bzAMBgNVHRMEBTADAQH/MA0GCSqG SIb3DQEBBQUAA4IBAQBIGsrZaWDwW2UWzTT2tbMEPOFVVZFZiWNazJLXFrXO1deW 1Ggaa2+h3tE+dMincQp7KPDeEOZ4VeXjrwZ1UfmJm5qOWhwJ2HnSBHay22tKO24Y 1qDF/ygMqW3yyr10MWZJaxQeUn+cgpclesS8IiTUVF61pYpjI8DrETa8Hwd8QJkC YaB3qXOVWdbvJX3DTkYPDEqLkC0qzqibe8fWd0JFF5lDMAeCS5EgW+lu6M++dQve u5L6Y1Xh8SvRB8SnZdy30OKNf0RrWPgNq9donv8nWgEJEYl9A/XRhWvl6ZWpQLEK 6GbCprqUIFgnWBhp0fteIMcgXZUe/oGBQ3/Yovd+ —–END CERTIFICATE—– 私钥: —–BEGIN RSA PRIVATE KEY—– MIIEowIBAAKCAQEA0QOLDDsfHJ+fYfMbxNRHMLnRmIBiA1osRBM/vFHMy86CKL22 SP/4hMa8HzO3nWEVPx8iLn8fnbx4+W0QAbeaTsIBIqJQwF7SLbcabAl9t4C4P+NE 0GNiV0b9dCYMREN+vNMqYIXwBF4rDoiEBq09FvpOlqSEaP/s+M4f1D6lJr1d2Z8x ve47BYkNDbvCCpQci1s6Hn/tjKhtBjveXaN4AnAYQBd7Zr/m7jVYvA4CZ2E5yig+ UtfimEUpDTYqEbN8xPv1tLwgNP5C4hY0ozKt20rhiWx5rTf/PpaHX2WIdRweg0Wa Mn08pzQ0R8iqTxqk736fFPxPdZJKcbrFUkBW6wIDAQABAoIBAEFpWHTFc+EjW1/u EzywKm9nV97gHsxpxfywAXxQJUWLJVTWultyMDZtc6ZYKxiHr3yHo8zlX+GfgESf Cyleal5HfM93+MmbYy+HZC93cO6izAbCe2C0GayyvNNCrQgYD2vMsjBu+kSDq/nq Y1crlDjCsSGX7xBlN6ZN68wiptDOVa1aBL+H3kzHtarURVdKY1MXrscR760/o8Nh qA/9GA1PoHQ7ApNG8oLVPS9SU4JU3PfURCQTk8otYZ4GrScpSeYp9ISi/UODlF1M IY+B9Bfrf2Eftv8zP+eF1UbTeBmMq0boy+afZsugMqjN/FpUpxUALlRX96az+VY9 fDSuUPECgYEA9Vv8E4HBbnzPrzA6jyYNcSnkfzTcNxuYaIqTrxWSLi018u1kRa9Z zLyKFNZRg3+RTWKAqDLKkC/oZZARlPcpx8uzV1T+zrffrnf2aK1LDHUHEmsMj7PY 2DIhghO90BPGuWPpbHjmpr51hHH6+n/LcLN0EHQ2T9wh5HZY75qup9cCgYEA2hQL sE0+Bp2rFP2CMfl5SAhhtmjrTGg76mItMmGj/3ycZ6CxRw/5nSepau7nbCZXSK+i Pp/EutuUNcD9ZmyP7z7In2PdWP8X8OSjd9abUn3cRPz8IjSOkbuUMKYWnweUl5Qw […]

如何使用Net :: HTTP只读取正文的x个字节?

在阅读网页主体时,Ruby的Net :: HTTP方法似乎全有或全无。 我怎么能读到,只是身体的前100个字节? 我试图从内容服务器读取,如果请求的文件不可用,则在响应正文中返回一条简短的错误消息。 我需要阅读足够的正文以确定文件是否存在。 这些文件很庞大,所以我不想让整个机构检查文件是否可用。

使用Sinatra更改HTTP状态消息

我正在编写一个简单的Sinatra应用程序,并且如果用户发布了具有特定数据的请求,我想返回错误“453”(自定义错误代码)和消息CLIENT_ERROR,或类似的东西。 问题是:查看Sinatra文档并进行一些测试我找不到设置响应错误消息的方法,只有响应状态。 所以,如果设置了Sinatra的响应 get ‘/’ do response.status = 453 end 我得到错误代码: curl -v localhost:4567 * About to connect() to localhost port 4567 (#0) * Trying 127.0.0.1… connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:4567 > Accept: */* > < HTTP/1.1 453 < X-Frame-Options: sameorigin < X-XSS-Protection: […]

Rails:获取http响应的值

在rails中我发了一个api的post并得到了回复,但我不知道如何获取信息并找到“code”变量的值。 $ response # $ puts response.body {“success”:true,”button”:{“code”:”dfhdsg7f23hjgfs7be7″,”type”:”buy_now”,”style”:”none”,”text”:”Send to MeBrah”,”name”:”MeBrah”,”description”:”Coins you're willing to give me.”,”custom”:”6″,”callback_url”:null,”success_url”:null,”cancel_url”:null,”info_url”:null,”auto_redirect”:false,”price”:{“cents”:40000000,”currency_iso”:”BTC”},”variable_price”:true,”choose_price”:false,”include_address”:false,”include_email”:false}} $ response.code “200” 我知道代码变量也是相同的“dfhdsg7f23hjgfs7be7”我只是好奇什么命令会返回它的值。

如何在Ruby 1.9.1中将Net :: HTTP响应转换为某种编码?

我有一个Sinatra应用程序( http://analyzethis.espace-technologies.com )执行以下操作 检索HTML页面(通过net / http) 从response.body创建一个Nokogiri文档 提取一些信息并将其发送回响应中。 响应应该是UTF-8编码 所以我在尝试阅读使用windows-1256编码的网站时遇到了这个问题,例如www.filfan.com或www.masrawy.com。 问题是虽然没有抛出错误,但编码转换的结果不正确。 net / http response.body.encoding给出ASCII-8BIT,它不能转换为UTF-8 如果我做Nokogiri :: HTML(response.body)并使用css选择器从页面获取某些内容 – 例如标题标签的内容 – 我得到一个字符串,当我调用string.encoding返回WINDOWS-1256 。 我使用string.encode(“utf-8”)并使用它发送响应,但同样响应不正确。 关于我的方法有什么问题的任何建议或想法?

具有HTTPS,SSL客户端证书和Keep-Alive支持的Ruby的HTTP库?

我正在尝试用Ruby编写HTTPS客户端。 它将使用HTTPS连接到服务器,传递身份validation令牌(通过单独的登录过程获得)和SSL客户端证书。 我正在使用rest-client执行以下操作: client = RestClient::Resource.new(url, :ssl_client_cert => OpenSSL::X509::Certificate.new(File.read(‘./certificate/client-2048.pem’)), :ssl_client_key => OpenSSL::PKey::RSA.new(File.read(‘./certificate/client-2048.key’), ”), :verify_ssl => OpenSSL::SSL::VERIFY_NONE) # … headers = { ‘X-Application’ => APP_KEY, ‘X-Authentication’ => @session_token, ‘content-type’ => ‘application/json’, ‘Accept’ => ‘application/json’ } response = client.post(request, headers) 这是有效的,但我想做的是使用keep-alive,以避免每次我想提出请求时都要经历整个连接过程。 所涉及的延迟使得我正在编写的监控应用程序变得不那么有用。 但是,我似乎找不到的是一个提供以下内容的Ruby库: HTTPS支持 SSL客户端证书支持 活着 对于应该提供它的rest客户,有一个拉动请求 。 httparty具有persistent_httparty,但如果它支持SSL客户端证书,则没有相关文档 。 我可以fork rest-client,合并现在已经位腐烂的pull-request,并使用它。 但是我肯定在这里遗漏了一些东西……是否有现有的图书馆提供我正在寻找的东西? 或者一些httparty文档解释了SSL库证书的SSL客户端证书使用情况? 任何帮助将不胜感激。

RunTimeError:ActionController :: RackDelegation在rspec 2.10.1中用于rails 3.1.4应用程序控制器

在我们的rails 3.1.4 app中, rspec用于测试应用程序控制器中的公共方法require_signin 。 这是方法require_signin: def require_signin if !signed_in? flash.now.alert = “Log in first!” redirect_to signin_path end end 这是rspec代码: it “should invoke require_signin for those without login” do controller.send(:require_signin) controller {should redirect_to signin_path} end 以上rspec生成巨大的多页错误,如下所示: RuntimeError:←[0m ←[31mActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: #”text/html”}, @_status=200, @_reques t=#[1, 1], “rack.input”=>#, …….. rspec代码有什么问题? 非常感谢。

如何在Ruby中发送HTTP PUT请求?

我正在尝试向特定URL发送PUT请求,并且到目前为止还没有成功。 如果我是通过HTTP请求者GUI(例如这个)进行的 ,那么就像在以下url上执行PUT一样简单: http://www.mywebsite.com:port/Application?key=apikey&id=id&option=enable|disable 请注意,在上述请求中指定了端口号。 通过ruby代码提交请求时,我还需要这样做。 我怎样才能在Ruby中复制这样的请求?

从rake任务调用控制器

我想从rake任务调用控制器动作。 我的问题是什么方法最好准备http请求? 感谢所有提示。 编辑:请别人提示吗? 我试过这个而不是工作: controller_obj = Controller.new controller.your_method 我有这个例外: rake aborted! uninitialized constant Controller Edit2:我试过了: sess = ActionController::Integration::Session.new sess.post(‘/route’, ‘codes=3′) 但我得到了(我在rake文件中要求’action_controller / integration’): rake aborted! cannot load such file — action_controller/integration