Tag: http

在HTTP Basic Auth用户名中损坏了UTF-8字符

我正在尝试使用Ruby on Rails构建Web服务。 用户通过HTTP Basic Auth进行身份validation。 我想在用户名和密码中允许任何有效的UTF-8字符。 问题是浏览器在将它们发送到我的服务之前会破坏Basic Auth凭证中的字符。 为了测试,我使用’カタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナ’作为我的用户名(不知道它是什么意思 – AFAIK它是我们的QA家伙想出的一些随机字符 – 请原谅我,如果它是某种方式令人反感)。 如果我把它看作一个字符串,并做username.unpack(“H *”)将其转换为hex,我得到:“3e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a8”这似乎是对适合32个汉字字符(3个字节元/ 6个hex数字)。 如果我使用通过HTTP Basic auth进入的用户名执行相同的操作,我会得到:’bafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaac’。 它显然要短得多。 使用Firefox Live HTTP Headers插件,这是发送的实际标头: Authorization: Basic q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o6q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o= 看起来像’bafbba …’字符串,交换了高低字节(至少当我将其粘贴到Emacs中时,基本64解码,然后切换到hexl模式)。 这可能是用户名的UTF16表示,但我没有任何东西可以将它显示为除了胡言乱语之外的任何东西。 Rails将内容类型标头设置为UTF-8,因此浏览器应该以该编码发送。 我获得了表单提交的正确数据。 问题出现在Firefox 3.0.8和IE 7中。 那么…是否有一些神奇的function让网络浏览器通过HTTP Basic Auth发送UTF-8字符? 我在接收端处理错误了吗? HTTP Basic Auth是否不适用于非ASCII字符?

在Ruby on Rails中访问自定义标头变量

在阅读了下面的问题( Ruby on Rails中的授权标题,使用密钥HTTP_AUTHORIZATION而不是授权进行访问? )我遇到了与OP类似的问题,但建议的答案似乎并没有解决我的问题。 我在调用本地托管服务器(通过Postman)时定义了一个自定义标头: @Igor:我实际上使用Postman,所以我只是添加了curl代码来演示我做了什么。 我想最好包含一个截图: 这是我的控制器中的代码,它试图读取所述标题: def authenticate_through_header custom_header_value = request.headers[‘custom_header’] end 但是,这个回报nil 。 另一方面, request.headers[‘HTTP_CUSTOM_HEADER’]返回值。 根据我最初链接的问题,我应该能够通过在括号[]中传递名称来获取值 – 这是在较新的Rails版本中已经更改的内容吗? 干杯:-) 更新 :它还可以通过以下方式访问变量: request.headers[‘custom-header’] 。 所以显然它可以用连字符替换下划线,这似乎很奇怪。

为什么使用HTTP PUT和DELETE方法而不是POST?

new_story GET /story/new(.:format) {:action=>”new”, :controller=>”stories”} edit_story GET /story/edit(.:format) {:action=>”edit”, :controller=>”stories”} story GET /story(.:format) {:action=>”show”, :controller=>”stories”} PUT /story(.:format) {:action=>”update”, :controller=>”stories”} DELETE /story(.:format) {:action=>”destroy”, :controller=>”stories”} POST /story(.:format) {:action=>”create”, :controller=>”stories”} 在网络工作中,我已经完成了其他技术,我只使用过GET和POST方法。 但是在Rails中使用RESTful路由时,默认情况下,PUT和DELETE方法用于更新和销毁操作。 使用PUT和DELETE的优点或需求是什么? 我假设这些方法只是做POST的另一种方式 – 但为什么不坚持使用POST?

使用Iron Router从Ruby发布到Meteor?

我一直在尝试从Ruby脚本获取消息到使用POST使用MeteorJS构建的webapp,但我一直面临一些问题。 关于使用Iron Router进行POST和GET方法管理的在线文档并不多。 我的Ruby脚本: meteorUri = URI(‘http://localhost:3000/newReport’); res = Net::HTTP.post_form(meteorUri, ‘message’ => ‘HelloFromRuby’, ‘max’ => ’50’) puts “From Meteor:\t#{res}” 我对Ruby没有多少经验。 我上面的代码大部分是在线的。 使用铁路由器的路由: Router.route(‘/newReport/:message’, {where: ‘server’}) .post( function(message){ Meteor.call(‘reportInsert’, {message: message}, function(error, recordId){ if (error){ alert(error.reason); } else { console.log(“Inserted ” + recordId); } }); }); 我试图让Ruby发一个post到http://localhost:3000/newReport并带有一个应该是字符串的消息。 函数reportInsert工作,我测试了它。 问题似乎在于发布POST或接收它。 谢谢!

HTTP调用在本地与AWS的行为不同 – 是ruby还是AWS?

我写的API有一个奇怪的问题。 API已经使http获取对其他服务的请求,并在某些情况下超时 – 在大多数情况下,其他服务关闭/无法访问。 我正在尝试完全在AWS上运行系统,但是当在那里运行API时,我会经常尝试访问同一实例上的服务。 API是用ruby + sinatra编写的; 我从来没有遇到过它的python前辈的问题。 如果我从AWS实例命令行curl其他服务的URL,我永远不会得到超时。 当我在本地运行API(AWS上的其他服务)时,它每次运行都很好。 最初我认为它可能是我正在使用的http库 – net / http,甚至在本地也存在问题。 切换到open-uri或rest-client修复了所有本地问题,但是当我在AWS上运行时,我仍然会有20%的时间超时。 API是ruby + sinatra,使用open-uri来执行http请求。 其他服务是ruby + sinatra或java。 我正在运行一个32位的Amazon Linux小实例,ruby 1.9.3,java 1.6; 我的本地机器是Mac with Snow Leopard,带有ruby 1.9.3和java 1.6。 任何想法或提示,以进一步缩小可能发生的事情? 更新:我的大sinatra应用程序和小sinatra应用程序表现不同!? 我的sinatra应用程序的测试版本调用我的java服务,都在AWS上运行……工作正常。 require ‘rubygems’ require ‘uri’ require ‘open-uri’ require ‘sinatra’ set :port, 6969 get ‘/wtf’ do xid = params[:xid] state = […]

Rails 3+中的HTTPvideo流

我需要一些帮助,如下: 好的情况是这样的:我正在联系服务器,从服务器我得到这个URI: http://// 该Web服务的文档说: “The part_ID will vary from part_start and part_end.” 我得到了所需的所有数据。 现在我得到的是这与HTTPvideo流有什么关系? 如果我有part_start = 1和part_end = 10,那意味着我将“下载”10帧? 怎么样? curl? wget的? Rails的? 应该像(例子)那样实现循环: for i=1; i<10 i++ download "http://127.0.0.1/34/i" end 例如,“http://127.0.0.1/34/10”是什么? 一个png / jpeg框架文件? 任何帮助都将非常有用。 非常感谢。

使用ruby的异步HTTP请求

我有一个充满请求的rabbitmq队列,我想以异步方式将请求作为HTTP GET发送,而不需要等待每个请求响应。 现在我对什么是更好用,线程或只是EM感到困惑? 我现在使用它的方式类似于以下内容,但是很高兴知道这里是否有更好的性能以及更好的性能,因为它是该程序的一个非常重要的部分: AMQP.start(:host => “localhost”) do |connection| queue = MQ.queue(“some_queue”) queue.subscribe do |body| EventMachine::HttpRequest.new(‘http://localhost:9292/faye’).post :body => {:message => body.to_json } end end 使用上面的代码,系统是否会在开始下一个请求之前等待每个请求完成? 如果有任何提示,我会非常感激

发布请求不工作rest

我有这个表格,当我用我的用户名和密码提交时,登录工作: 现在我尝试使用rest-client登录网站: require ‘rest_client’ response = RestClient.post ‘https://website.de/login/index.php’, :username => ‘Horst’, :password => ‘Secret’ puts response.code 不知何故,这不会工作我得到状态代码200但成功登录将是303! 我相信问题是它不是http而是https所以我如何添加ssl? 谢谢

打开URI – 无效的URI错误,编码/转义不影响

我正在构建一个YahooFinance Api,并在尝试使用开放URI时不断碰壁。 码: uri = (“http://ichart.finance.yahoo.com/table.csv?s=#{URI.escape(code)}&a=#{start_month}&b=#{start_day}&c=#{start_year}&d=#{end_month}&e=#{end_day}&f=#{end_year}&g=d&ignore=.csv”) puts “#{uri}” conn = open(uri) 错误: `split’: bad URI(is not URI?): http://ichart.finance.yahoo.com/table.csv?s=%255EIXIC&a=00&b=1&c=1994&d=09&e=14&f=2014&g=d&ignore=.csv} (URI::InvalidURIError) 我已经尝试了URI.unescape(code) ,输出code为^IXIC ,以及保留任何URI方法, code将通过%5EIXIC 。 在阅读堆栈溢出后,我尝试了这两种方法都无济于事: uri = URI.parse(URI.encode(url.strip)) safeurl = URI.encode(url.strip) 即使在查看了另一个ruby yahoo-finance gem的代码之后, 在这里 ,我似乎无法找到解决方案。 任何帮助是极大的赞赏。 谢谢 编辑:当我用单引号手动输入url时,我可以使用open(uri) 。 做双引号,(用于插入ruby物体),在这里发挥作用?

使用ruby中的Net :: HTTP代理通过代理访问网站

我正在尝试使用Net :: HTTP :: Proxy访问QA环境网站来获取响应。但是每当我尝试连接时,我都会收到SocketError。 请找到我正在尝试使用的代码段。 proxy_addr = “http://autoproxy1.qa.com” proxy_class = Net::HTTP::Proxy(proxy_addr,80).start(“mywebsite.com”) 这是我得到的错误 SocketError: getaddrinfo: Name or service not known from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:581:in `initialize’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:581:in `open’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:581:in `block in connect’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/timeout.rb:44:in `timeout’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/timeout.rb:82:in `timeout’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:581:in `connect’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:574:in `do_start’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:569:in `start’ from /site/ruby/ruby-1.9.1-4/lib/ruby/1.9.1/net/http.rb:453:in `start’ from (irb):6 from /site/ruby/ruby-1.9.1-4/bin/irb:12:in `’ 通过配置浏览器的autoproxy设置,我可以使用Selenium访问同一个网站。 […]