如何从api的响应中获得正确的输出?

时间:2016-06-30 07:52:31

标签: ruby-on-rails typhoeus

我正在使用typhoeus gem打一个api,这是我得到的回应。

"\x1F\x8B\b\x00\x00\x00\x00\x00\x04\x00\xED\xBD\a`\x1CI\x96%&/m\xCA{\x7FJ\xF5J\xD7\xE0t\xA1\b\x80`\x13$\xD8\x90@\x10\xEC\xC1\x88\xCD\xE6\x92\xEC\x1DiG#)\xAB*\x81\xCAeVe]f\x16@\xCC\xED\x9D\xBC\xF7\xDE{\xEF\xBD\xF7\xDE{\xEF\xBD\xF7\xBA;\x9DN'\xF7\xDF\xFF?\\fd\x01l\xF6\xCEJ\xDA\xC9\x9E!\x80\xAA\xC8\x1F?~|\x1F?\"\x1E\xFF\x1E\xEF\x16ez\x99\xD7MQ-?\xFBhw\xBC\xF3Q\x9A/\xA7\xD5\xACX^|\xF6\xD1\xBA=\xDF>\xF8\xE8\xF78\xFA\x8D\x93\xC7\xAF\xAAj\xD1^\xAF\xF2\xDF\xFF<\xCFg\xF4A\x9A>\xAE\xF5\xA3\x86\xFF\xF4>\xD0\xBF\xE9\x93y\xD5\xE6\xE5\xEF_\xCC\x8E\xEE\xEF\xEF~\xFA\xF8\xAE\xFD\xB3\xD3\x00/\xFE\xFEx\x13\xDF\xDD\x7F\xB8\xB7\xBF\xB3o\x1A\a_\r\xBE\xB6\xCC\x16\xF9\xD1\x9B\xFAz\x95\x02\xCF\xFE\xBB\xFC\xBD}\xBBi\xB3\xE5,\xABg\xBF\xFF4[\xB54\xEE\xA3\xD7\xFA\xC1\xE3\xBB\xBD\xAF\x06_\xFA\xFD\xDB:[6e\xD6\x129\x86\xDF\xF7[YP]\xECfy3\xAD\vn\xEF\x1A\xF5\xC6\x10m\xB5\xC8\xDE\xFD\xFE\xD5t\xBA^e\xCB\xE9\xF5\xEF\xBF\xCAk~\xE1h\xEF\xF1\xDD\x81o\xEC\x9B\xCB\xEA\xF7\xAF\xCE\xE5\xB3\x87\x0F\x1F>\xBE\xEB\xFDm\xDB4\xC5\x0Fr\xFB\xE9\x1E\x01\r>\xB0\xCD\xF0\xD7\xEF\xCF_\x15\xCBi\xF9\xFB\xB7y]g\xD3\xFC\xE8YV6\xF9\xE3\xBB\x03\xDF\xDA\xB7/\x8B\xFC\xAA9\xFAj\xF9vY]-\x1F\xDF\x95?\xED\xB7\x18F\xFE\x8E\xA88\xC9g\xCD\xD1\x8E\x8C\xCB}`\xDB\x99\x8F~\xFF\xE9\xBC(g\xBF\x7Fv\x91\xA3q\xE4S\xFB\x06\x00\x15\xCB\xF3l\xD9\xD2\x0F\x19\x11\xBD\x11\xF94x\x83\x01\xD5\xF9\xD2~\xBB+\xEF\xF4>\xB7o\x15\xCD\xEF?\xCB\xAE\xD7M.\x9F+U:\x9F\xDA\xD6\x93:\xCF\xDE\x9Eg\r\xBA\x9F\x96\xEB\x19\xF1\x8D\xBE\x11\xF9\xC6\xBE\xD5\xE5\x95U1m\xD7u~4o\xDB\xD5\xA3\xBBwW\xC5\xBB{\xE3\xEC\xA2\x9Ae\xE3e\xDE\ng\x15\v\xA2Fs\x97\x04\x13\xFF\xFF\x94\xFF\xF9\xFDwwv\xF6\xF6\xF6w\xF7v\xF0\xCB\xC1\xDE\xFD{{;\xE3\x9F^]\xFC\x1E\xCDg\xF7v\xF7\xDE\xF5y\xD2\xF4c\x11\x01\xAD\xF1\x8D\xFB\xE4n\xE7#a\b\xFF\x83\xCE\xDF\xF4\x89tC\x02\x0F\xA4L\xAF\xF4g\xA7\x01^d\xD0\xF8\xEE\xD3\x9D\x87\xF7\x0F\xEE\x99\xC6\xC1W\x83\xAF\xB1Z\xB0j#\xFDn\xD1\xCE\xD3'\x86\xCC}P\xDC\xDC\x02\xEB\x8A\xBA\xD5\x02=8\xBD\x96\x830|uqkp\xFEK\x16r\x17\xF7\xA8\xF6\xE8\x8D0\xDA\n\xEC\x1D\xD1$\xA4\x0E\x06\xBE\xB1oz:\xE5G:F\xF5\x02\xBD\x11\xF94x\x83\x01\xF9\xBA\xE4G:\x86\xFA\xB1\x88\x80\xD6\xF8\xC6}\xF2\xC3\xD21{\a\x9F\xEE\xEF\xDD{`Z\a\xDF\r\xBE\xC7Z\xE3\xF5\x9A\xA4\xA3\xA8jV4\xFD\xF7\xB9\x8D\x85\xD0\x15\xF0\xEE\xDB\xBD\xEF\a\xDF\xF4U\xC3\r@\xFC\xA6\x16^\x17\xCF\xA8~\xE8\x8D&\xDA\n\f\x1C\xD1\x15$\xF0\x03\xDF\xD87=\xADq;-B\"\x16\xFCm[\xE1\xAF\x88\x9AP\xE6\x1F\xF8\xD6\xBE-Z\xE3GJ\x84\x9F\x9F5%\xB2w;%\xB2\xBF\xF3\xE9\xEE\xC1\xDE\x0E\x9E\xDD\x87\x0Fw\xEF=\xF8\xF4\xE0\xFFSZd\x9F\xA6#\xF2\xDD\xE0{\xAC!\x02\x11N\xAF:~A\xF4\x15\v\xB0+\xEF1`v\xE6H\x80\xBA\xCD\a\x01\xF9\x8A\xE3\xFD`\xFAoZ\xF0\xDDQD\x95Io\xAC\xD1V`\xF7\x88b\xF9\x91\xCA\xF9\x91\xCA!M\xF0\xF3O\xE5|PR%\xDD\xDD\xF9\xDD\xD3/\xCF\xCF\xFB0\xB8\x9D\x85\xD2\x15r\e\xC7\x90\x84\xE8o\xF6\xAB\xC1\x97|\xCD0\xFC\xBE\xDF\xCA\x82\xEAb\x17\xD5\f\xBD1D[\x81w#Z\xE2gC\x7F\xFC(\xF0\xC1w\f\xC8W\x14\xFF\x1FQ ??\x02\x9F\xFD\xAF\x13\xF88\xFD\xB1\xF7#\xFD\xC1/\xFCH\x7F\x90l\xA0q\xE4S\xFB\x06\x00u4\x05\xBD\x11\xF94x\x83\x01\xF9z\xE2G\xFA\x83\xFA\xB1\x88\x80\xD6\xF8\xC6}\xF2\xC3\xD5\x1F\xC4\xC8\x91\xEF\x06\xDFc\xBD\xE0\xF4\xC7\xBD\x1F\xE9\x0F~\xE1G\xFA\x83d\x03\x8D#\x9F\xDA7\x00\xA8\xA3)\xE8\x8D\xC8\xA7\xC1\e\f\xC8\xD7\x13?\xD2\x1F\xD4\x8FE\x04\xB4\xC67\xEE\x93\x1F\xAA\xFE\xB8\xFFa\xF1\xCB\xF1\xEC\x92\xA4%O_\xAE\xEB\xE9<k\xF2\xF4\xA0\x0F\x8E_\xB1\x00\xBB\xF2\xBEA\x15\f\xBF\xE4+\x89\xE1\xF7\xFDV\x16T\x17\xBB\xA8\x92\xE8\x8D!\xDA\n\\\x1CQ\x18{\xC2\xDF\x91o\xEC\x9B\x9E\xEA\xF8\x91*Q\xF1\xA77\"\x9F\x06o0 _e\xFCH\x95P?\x16\x11\xD0\x1A\xDF\xB8O~\xB8\xAA\xC4\xB6\x0E\xBE\e|\x8F\xF5\xC2&U\"\xB9\xCE\x0FH\xC6\xEA\a$:\xFA\x9B\xFDj\xF0%_g\f\xBF\xEF\xB7\xB2\xA0\xBA\xD8EuFo\f\xD1V`\xEA\x88\xFE %0\xF0\x8D}\xD3\xD3$?\xD2,\xAA\r\xE8\x8D\xC8\xA7\xC1\e\f\xC8\xD7 ?\xD2,\xD4\x8FE\x04\xB4\xC67\xEE\x93\x1F\xAEf\x89x\x15\xF4\xDD\xE0{\xAC\x176h\x96]\xE2\xF9\xE8;\x16bW\xE07\xE8\x82\xE1\x97|-1\xFC\xBE\xDF\xCA\x82\xEAb\x17\xD5\x12\xBD1D[\x81\x8D#\x1A\x83H0\xF0\x8D}\xD3\xD3\x1D?\xD2%*\xFF\xF4F\xE4\xD3\xE0\r\x06\xE4\xEB\x8C\x1F\xE9\x12\xEA\xC7\"\x02Z\xE3\e\xF7\xC9\x0FU\x97|J\xB3\x11\xF9n\xF0=\xD6\v\eu\xC9\x8F\xDC\x94\x8E\x02!-0\xF0\x8D}\xD3S%?R-\xAA\x0E\xE8\x8D\xC8\xA7\xC1\e\f\xC8W!\xC4\xCC\xD1\xCF\xED[\x1D%\xA2T\xE9|j[G\x14\x88\xBE\x11\xF9\xC6\xBE\xD5\xE5\x15#\xF2?\xEFT\xCB=\xD3:\xF8n\xF0=\xD6\vN\xB5\xBC^\xE5\xD3\"+\xD3\x97u\xB5\xA8~\xA4T:\xAA\x83\xE4\x7F\xE0\e\xFB\xA6\xA7D~\xA4TT\x11\xD0\e\x91O\x837\x18\x90\xAF<~\xA4T\xA8\x1F\x8B\bh\x8Do\xDC'?\\\xA5r\xDF\xB4\x0E\xBE\e|\x8F\xF5B_\xA9\xD0\"O^\xF7!qk\v\xAB+\xEA\e\xB4\xC0\xF0K\xBE~\x18~\xDFoeAu\xB1\x8B\xEA\x87\xDE\x18\xA2\xAD\xC0\xC0\x11]A\x02?\xF0\x8D}\xD3\xD3\x1A?\xD2\"*\xF9\xF4F\xE4\xD3\xE0\r\x06\xE4k\x8B\x1Fi\x11\xEA\xC7\"\x02Z\xE3\e\xF7\xC9\x0FW\x8B\xD8\xD6\xC1w\x83\xEF\xB1^pZ\xE49Q7\xFD\xA2X\xAE\xDB\xFCG\x9A\x84_\xF8\x91&!)A\xE3\xC8\xA7\xF6\r\x00\xEA\xE8\fz#\xF2i\xF0\x06\x03\xF25\xC6\x8F4\t\xF5c\x11\x01\xAD\xF1\x8D\xFB\xE4\x87\xAAI\x0E\xBE\x99 \x87\xB5\xC8\x8F\x82\x9C\x8E\xEA \xF9\x1F\xF8\xC6\xBE\xE9)\x91\x1F)\x15U\x04\xF4F\xE4\xD3\xE0\r\x06\xE4+\x8F\x0FP*7)\x15U\x1DJ\xC7\x1F)\x95n\x03\xBC\xC8\xA0\xF1\xDD\xFE\xCE\xC1\xC3\x87{_g\x81\xE7\xF5\x9A\xA4\xA3\xA8jV,\xFD\xF7\xB9\x8D\x85\xD0\x15\xF0\xEE\xDB\xBD\xEF\a\xDF\xF4U\xC3\r@\xFC\xA6\x16^\x17\xCF\xA8~\xE8\x8D&\xDA\n\x8C\x1D\xD1\x15$\xF0\x03\xDF\xD87=\xADq;-B\"\x16\xFCm[\xE1\xAF\x88\x9AP\xE6\x1F\xF8\xD6\xBE-Z\xE3GJ\x84\x9F\x9F5\xCFd\xEFvJd\x7F\xE7\xD3\xDD\x83\xBD\x1D<\xBB\x0F\x1F\xEE\xDE{\xF0\xE9\xC1\xFF\xB7\xB4\b1r\xE4\xBB\xC1\xF7XCX\xD7\xA4\xFF.\x7Fo\xDF\xEE\n\xB7\xFFf\xEF\"

守则是这样的:

task set_hotel_room_types_agoda: :environment do 
  hotel_ids = BookingHotelPartnerDetail.pluck(:partner_booking_hotel_id)
  @res = []
  hydra = Typhoeus::Hydra.hydra
  binding.pry
  hotel_ids.first(150) do |ids|
    ids.each do |id|    
      url = "http://xml.agoda.com/datafeeds/Feed.asmx/GetFeed?feed_id=6&apikey=#{AGODA_API_KEY}&mHotel_id=#{id}"
      req = Typhoeus::Request.new(url, method: :get, headers: {'accept-encoding' => 'gzip,deflate', 'Content-Type' => 'application/xml'})
      req.on_complete do |response| @res << response end
      hydra.queue(req)
    end           
  end
end

如何从中获得可用的东西?

1 个答案:

答案 0 :(得分:-2)

看起来像是不完整的gziped响应。我认为客户端的下载响应不完整。

看,以下行看起来类似

ActiveSupport::Gzip.compress('fooooo')
=> "\x1F\x8B\b\x00\r\xD4tW\x00\x03K\xCB\a\x01\x00\x91\xCD\xABk\x06\x00\x00\x00"