Hi Brian,

ns_httppost does url-encoding of the name-value pairs you pass in as qsset. For SOAP you need to just post the xml message, not as a name-value pair. If you sniffed the actual request you're sending with ns_httppost it would be something like
Message=<?xml version="1.0" .....

Try using ns_http queue instead.

set rqid [ns_http queue POST http://www.webserviceX.NET/stockquote.asmx $soap_request $rqset]
ns_http wait $rqid result

http://panoptic.com/wiki/aolserver/Ns_http for reference.

-J

Fenton, Brian wrote:
Hi

I`m having some difficulties that hopefully somebody here could assist me with. 
I`m hand-coding a request to a SOAP service and I can`t get it working with 
AOLserver`s ns_httppost command, but it works fine using sockets. I`m wondering 
could it be some headers or encoding that ns_httppost does? Or maybe a timeout? 
I`ve seen some articles on the web that suggest putting \r\n between the 
headers and the body (which you can see in the sockets example) - does 
ns_httppost automatically do that for me? If not how would I do it?

I`m  using AOLserver 4.0.10


Here`s the code using ns_httppost that doesn`t work - just returns empty string:

set result ""
set soap_request {<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";><soap:Body><GetQuote 
xmlns="http://www.webserviceX.NET/";><symbol>GOOG</symbol></GetQuote></soap:Body></soap:Envelope>}
set type "text/xml"
set rqset [ns_set new rqset]
ns_set put $rqset SOAPAction "http://www.webserviceX.NET/GetQuote";
set qsset [ns_set new qsset]
ns_set put $qsset Message $soap_request
set cmd {set page [ns_httppost "http://www.webserviceX.NET/stockquote.asmx"; 
$rqset $qsset $type ]}
if {[catch $cmd errmsg]} {
   set result  $errmsg
}  else {
   set result  $page
}
ns_return 200 text/plain $result



And here`s the sockets program (based on some fine code written by Tom Jackson) 
- this works perfectly (abeit it takes a while to come back):

set SOAP {<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap:Body>
     <GetQuote xmlns="http://www.webserviceX.NET/";>
       <symbol>GOOG</symbol>
     </GetQuote>
   </soap:Body>
</soap:Envelope>}

set length [string length $SOAP]
set headers ""
set fds [ns_sockopen www.webserviceX.NET 80]
set rid [lindex $fds 0]
set wid [lindex $fds 1]
puts $wid "POST /stockquote.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: $length
SOAPAction: \"http://www.webserviceX.NET/GetQuote\";
$SOAP"
flush $wid
while {[set line [string trim [gets $rid]]] != ""} {
     lappend headers $line
}
set page [read $rid]
close $rid
close $wid

ns_return 200 text/plain "
Sent:
POST /stockquote.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: $length
SOAPAction: \"http://www.webserviceX.NET/GetQuote\";
$SOAP
Received:
[join $headers "\n"]\n\n$page"

Any suggestions?
Many thanks,
Brian


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email 
to<[email protected]>  with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to 
<[email protected]> with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.

Reply via email to