2013-11-10 14 views
9

httpリクエストを行うと奇妙なエラーが発生します。ステータスラインが間違っています: "<!DOCTYPE HTML PUBLIC " - // IETF // DTD HTML 2.0 // EN ">"

要求コードは次のとおりです。

purchase_xml = Transaction.yo_xml(api_username,api_password,@total, account, merchant_reference) 
      uri = URI.parse(url) 
      http = Net::HTTP.new(uri.host, uri.port) 
      request = Net::HTTP::Post.new(uri.request_uri) 
      request.body = purchase_xml 
      response = http.request(request) 
      result = Hash.from_xml(response.body) 

ここで、yo_xmlは次のようになります。

def self.yo_xml(api_username, api_password,amount, account, transaction_id) 
     xml = "<?xml version=1.0 encoding=UTF-8?><AutoCreate><Request><APIUsername>#{api_username}</APIUsername> 
       <APIPassword>#{api_password}</APIPassword><Method>acdepositfunds</Method><Amount>#{amount}</Amount> 
       <Account>#{account}</Account><Narrative>Purchase of SMS</Narrative><InternalReference>#{transaction_id}</InternalReference> 
       <ExternalReference>#{transaction_id}</ExternalReference><ProviderReferenceText>Thank you for using Skyline SMS</ProviderReferenceText> 
       </Request></AutoCreate>" 
     return xml 
    end 

このエラーが発生しています。

Net::HTTPBadResponse 
wrong status line: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">" 
この線O上げ

response = http.request(request) 

すべてのヘルプは高く評価されます。

答えて

15

httpsでリソースにアクセスしようとすると、これに似たエラーが表示されます。その場合は言及していませんでしたが、その場合はの前にhttp.use_ssl = trueと設定すると修正される可能性があります。

3

これは、私はそれが

purchase_xml = Transaction.yo_xml(api_username,api_password,@total, account, merchant_reference) 
      uri = URI.parse(url) 
      http = Net::HTTP.new(uri.host, uri.port) 
      request = Net::HTTP::Post.new(uri.request_uri) 
      request.body = purchase_xml 
      http.use_ssl = true 
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
      response = http.request(request) 
      result = Hash.from_xml(response.body) 
を動作するようになった方法です
関連する問題