Thanks Dave, Yes, my original plan was to use ns_httpspost, but Jeff Rogers pointed out that ns_httppost uses name-value pairs, so if I understood it correctly for the SOAP request I want to make, I can't use that?
Brian ________________________________________ From: AOLserver Discussion [aolser...@listserv.aol.com] On Behalf Of Dave Bauer [d...@thedesignexperience.org] Sent: 03 February 2010 12:37 To: AOLSERVER@LISTSERV.AOL.COM Subject: Re: [AOLSERVER] differences between ns_httppost and sockets? On Wed, Feb 3, 2010 at 6:58 AM, Fenton, Brian <brian.fen...@quest.ie<mailto:brian.fen...@quest.ie>> wrote: Hi Jeff, many thanks for that pointer! That makes a lot of sense. Unfortunately it's not working for me with that particular StockQuote web service. Now I know the web service is quite slow but it works fine with the sockets approach. I tried different timeouts but no joy. I wonder is it my AOLserver's (4.0.10) version of ns_http? I can't seem to find any free web services to test against - that webserviceX.NET is very slow. My other question is - I'm hoping to do an SSL version once I have the basic code working. I don't think there's a HTTPS version of ns_http, is there? At least there is an SSL version of ns_sockopen (ns_openssl_sockopen). Would that be the way to go? There is ns_httpsget and ns_httpspost in ns_openssl. Dave Here's my code: 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" if {[catch {set rqid [ns_http queue POST "http://www.webserviceX.NET/stockquote.asmx" $soap_request $rqset]} err ]} { set result $err ns_log Notice "Brian error result=$result" } else { set status [ns_http wait $rqid result 60] ns_log Notice "Brian after wait rqid=$rqid status=$status result=$result" } ns_return 200 text/plain $result Brian ________________________________________ From: AOLserver Discussion [aolser...@listserv.aol.com<mailto:AOLSERVER@LISTSERV.AOL.COM>] On Behalf Of Jeff Rogers [dv...@diphi.com<mailto:dv...@diphi.com>] Sent: 03 February 2010 07:12 To: AOLSERVER@LISTSERV.AOL.COM<mailto:AOLSERVER@LISTSERV.AOL.COM> Subject: Re: [AOLSERVER] differences between ns_httppost and sockets? 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<http://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<http://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<http://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<lists...@listserv.aol.com<mailto:lists...@listserv.aol.com>> 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 <lists...@listserv.aol.com<mailto:lists...@listserv.aol.com>> 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 <lists...@listserv.aol.com<mailto:lists...@listserv.aol.com>> with the body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: field of your email blank. -- Dave Bauer d...@solutiongrove.com<mailto:d...@solutiongrove.com> http://www.solutiongrove.com -- AOLserver - http://www.aolserver.com/ To Remove yourself from this list, simply send an email to <lists...@listserv.aol.com> 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 <lists...@listserv.aol.com> with the body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: field of your email blank.