2011-08-30 19 views
1

私はソープWebサービスを消費しようとします。 ruby net/https gemを使用します。 私は何をしようと、私は400の悪い要求を取得し続けるreadbody = trueエラー 私はそれがヘッダーと何かを持っている疑いがありますが、私はこれをさらにデバッグする方法を知ることができません。どんな助けも歓迎です!ruby​​ net-httpでSOAPリクエストがエラー400を返します。bad request

よろしく、

レムコ

require 'net/https' 
require 'uri' 
# Create the http object 
pem = File.read("cert.pem") 
url = "https://tstedpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1Soap11" 
uri = URI.parse(url) 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.cert = OpenSSL::X509::Certificate.new(pem) 
http.key = OpenSSL::PKey::RSA.new(pem) 
http.verify_mode = OpenSSL::SSL::VERIFY_PEER 


# Create the SOAP Envelope 
xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
xml<<"<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:urn=\"urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1\"" 
xml<<"xmlns:urn1=\"urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1\"" 
xml<<"xmlns:urn2=\"urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1\">" 
xml<<" <soap:Header/>" 
xml<<" <soap:Body>" 
xml<<"  <urn:Indienen>" 
xml<<"   <urn:IndienenRequest>" 
xml<<"   <urn1:Declaratie>" 
xml<<"    <urn2:IndienerEmailadres>[email protected]</urn2:IndienerEmailadres>" 
xml<<"    <urn2:ReferentieZorgaanbieder>REF001</urn2:ReferentieZorgaanbieder>" 
xml<<"    <urn2:EmailNotificaties>" 
xml<<"     <urn2:IndicatieControleResultaat>false</urn2:IndicatieControleResultaat>" 
xml<<"     <urn2:IndicatieAfkeuringResultaat>true</urn2:IndicatieAfkeuringResultaat>" 
xml<<"    </urn2:EmailNotificaties>" 
xml<<"    <urn2:DeclaratieBestand>" 
xml<<"     <urn2:Bestandsnaam>bestandsnaam.txt</urn2:Bestandsnaam>" 
xml<<"     <urn2:Bestandsgrootte>1254</urn2:Bestandsgrootte>" 
xml<<"     <urn2:Data>aZFQ=</urn2:Data>" 
xml<<"    </urn2:DeclaratieBestand>" 
xml<<"   </urn1:Declaratie>" 
xml<<"   </urn:IndienenRequest>" 
xml<<"  </urn:Indienen>" 
xml<<" </soap:Body>" 
xml<<"</soap:Envelope>" 
xml<<"</xml>" 
# Set Headers 

headers={ 
"Accept-Encoding"=>"gzip, deflate", 
"Content-Type" => 'text/xml; charset=UTF-8', 
"SOAPAction" => "urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen", 
"User-Agent"=>"Jakarta Commons-HttpClient/3.1", 
"Host"=>"edpwebservice.vecozo.nl", 
"Content-Length"=> xml.length.to_s 
} 


result= http.post(uri.path, xml, headers) 
puts result.inspect 

これはデWSDLですが、私はこのことができます願っています:私はあまりにも長い道のりのために同じ問題で苦労し

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions 
    xmlns:tns="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1" 
    xmlns:types="urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1" 
    xmlns:msg="urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1" 
    xmlns:ia="urn:www-vecozo-nl:isalive:v1" 
    xmlns:iam="urn:www-vecozo-nl:messages:isalive:v1" 
    targetNamespace="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:fault="urn:www-vecozo-nl:types:vsp:edp:faultcontract" 
    name="VspEdpIncomingZvlIndienen"> 

    <wsdl:types> 
    <xs:schema targetNamespace="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1" elementFormDefault="qualified"> 
      <!-- Types --> 
     <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.ISEIBestand.Edp.Indienen.Types.xsd" namespace="urn:www-vecozo-nl:types:vsp:edp:declareren:indienen:v1" /> 

     <!-- Messages --> 
     <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.ISEIBestand.Edp.Indienen.Messages.xsd" namespace="urn:www-vecozo-nl:messages:vsp:edp:declareren:indienen:v1" /> 

     <!-- Fault --> 
     <xs:import schemaLocation="./Schemas/V1/Vecozo.Vsp.Edp.FaultContract.xsd" namespace="urn:www-vecozo-nl:types:vsp:edp:faultcontract" /> 

     <!-- Requests & Responses --> 
     <xs:element name="Indienen"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="IndienenRequest" type="msg:IndienenRequest" nillable="true" /> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="IndienenResponse"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="IndienenResult" type="msg:IndienenResponse" nillable="true" /> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="VspEdpFaultContract" type="fault:VspEdpFaultContract" /> 
    </xs:schema> 

</wsdl:types> 

<wsdl:message name="IndienenSoapIn"> 
    <wsdl:part name="parameters" element="tns:Indienen" /> 
</wsdl:message> 

<wsdl:message name="IndienenSoapOut"> 
    <wsdl:part name="parameters" element="tns:IndienenResponse" /> 
</wsdl:message> 

<wsdl:message name="VspEdpIncomingZvlIndienenFaultContract_FaultMessage"> 
    <wsdl:part name="detail" element="tns:VspEdpFaultContract" /> 
</wsdl:message> 

<wsdl:portType name="VspEdpIncomingZvlIndienen"> 
    <wsdl:operation name="Indienen"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Via deze methode kan men declaraties indienen bij VECOZO.</wsdl:documentation> 
     <wsdl:input wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" message="tns:IndienenSoapIn" /> 
     <wsdl:output wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:IndienenResponse" message="tns:IndienenSoapOut" /> 
     <wsdl:fault wsaw:Action="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:IndienenFault" 
        name="VspEdpFaultContract" 
        message="tns:VspEdpIncomingZvlIndienenFaultContract_FaultMessage" /> 
    </wsdl:operation> 
</wsdl:portType> 

<wsdl:binding name="VspEdpIncomingZvlIndienenBinding12" type="tns:VspEdpIncomingZvlIndienen"> 
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="Indienen"> 
     <soap12:operation soapAction="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" style="document" /> 
     <wsdl:input> 
      <soap12:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
      <soap12:body use="literal" /> 
     </wsdl:output> 
     <wsdl:fault name="VspEdpFaultContract"> 
      <soap12:fault name="VspEdpFaultContract" use="literal" /> 
     </wsdl:fault> 
    </wsdl:operation> 
</wsdl:binding> 

<wsdl:binding name="VspEdpIncomingZvlIndienenBinding" type="tns:VspEdpIncomingZvlIndienen"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="Indienen"> 
     <soap:operation soapAction="urn:www-vecozo-nl:vsp:edp:declareren:indienen:v1:Indienen" style="document" /> 
     <wsdl:input> 
      <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output> 
      <soap:body use="literal" /> 
     </wsdl:output> 
     <wsdl:fault name="VspEdpFaultContract"> 
      <soap:fault name="VspEdpFaultContract" use="literal" /> 
     </wsdl:fault> 
    </wsdl:operation> 
</wsdl:binding> 


<wsdl:service name="VspEdpIncomingZvlIndienen"> 
    <wsdl:port name="VspEdpIncomingZvlIndienen12" binding="tns:VspEdpIncomingZvlIndienenBinding12"> 
     <soap12:address location="https://edpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1" /> 
    </wsdl:port> 
    <wsdl:port name="VspEdpIncomingZvlIndienen" binding="tns:VspEdpIncomingZvlIndienenBinding"> 
     <soap:address location="https://edpwebservice.vecozo.nl/Router.V1.svc/IndienenDeclaratieV1Soap11" /> 
    </wsdl:port> 
</wsdl:service> 

+0

これをデバッグするにはwsdlにアクセスする必要があります – rubiii

+0

こんにちは、私はメッセージにwsdlを追加しました – remcoh

+0

wsdlは不完全であるようです。少なくとも、soapUIはそれをインポートできません。あなたは何ができますか:[soapUI](http://soapui.org)(無料)をインストールし、wsdlをインポートして、soapUIで作成したサンプルリクエストを自分のリクエストと比較します。 – rubiii

答えて

関連する問題