Dear Gustaf,

I would dearly love to avail of the xotcl functionality but I suspect my system 
won't meet the dependencies.
The system is running an OpenACS 4.6 system (8 years old) and I know the 
OpenACS xotcl package arrived later than that.

What are the dependencies for xotcl-core? 

I wasn't aware of the tcl tls package - I'll take a look at that.

many thanks!
Brian



________________________________________
From: AOLserver Discussion [[email protected]] On Behalf Of Gustaf 
Neumann [[email protected]]
Sent: 04 February 2010 09:21
To: [email protected]
Subject: Re: [AOLSERVER] differences between ns_httppost  and sockets?

Dear Brian and all,

xotcl-core of OpenACS contains a full set of HTTP client
support, including POST requests and https (via the
tcl tls package). Below is the description included in the
source ....

best regards
-gustaf neumann

===============================================

   # Defined classes
   #  1) HttpCore (common base class)
   #  2) HttpRequest (for blocking requests + timeout support)
   #  3) AsyncHttpRequest (for non-blocking requests + timeout support)
   #  4) HttpRequestTrace (mixin class)
   #  5) Tls (mixin class, applicable to various protocols)
   #
   ######################
   #
   # 1 HttpRequest
   #
   # HttpRequest is a class to implement the client side
   # for the HTTP methods GET and POST.
   #
   # Example of a GET request:
   #
   #  set r [::xo::HttpRequest new -url http://www.openacs.org/]
   #
   # The resulting object $r contains all information
   # about the requests, such as e.g. status_code or
   # data (the response body from the server). For details
   # look into the output of [$r serialize]. The result
   # object $r is automatically deleted at cleanup of
   # a connection thread.
   #
   # Example of a POST request with a form with var1 and var2
   # (providing post_data causes the POST request).
   #
   #  set r [::xo::HttpRequest new \
   #             -url http://yourhost.yourdomain/yourpath \
   #             -post_data [export_vars {var1 var2}] \
   #             -content_type application/x-www-form-urlencoded]
   #
   # More recently, we added timeout support for blocking http
   # requests. By passing a timeout parameter, you gain control
   # on the total roundtrip time (in milliseconds, ms):
   #
   #  set r [::xo::HttpRequest new \
   #          -url http://www.openacs.org/ \
   #          -timeout 1500]
   #
   # Please, make sure that you use a recent distribution of tclthread
   # ( > 2.6.5 ) to have the blocking-timeout feature working
   # safely. This newly introduced feature makes use of advanced thread
   # synchronisation offered by tclthread that needed to be fixed in
   # tclthread <= 2.6.5. At the time of this writing, there was no
   # post-2.6.5 release of tclthread, hence, you are required to obtain a
   # CVS snapshot, dating at least 2008-05-23. E.g.:
   #
   # cvs -z3 -d:pserver:[email protected]:/cvsroot/tcl co \
   #         -D 20080523 -d thread2.6.5~20080523 thread
   #
   # Provided that the Tcl module tls (see e.g. http://tls.sourceforge.net/)
   # is available and can be loaded via "package require tls" into
   # the aolserver, you can use both TLS/SSL secured or unsecured requests
   # in the synchronous/ asynchronous mode by using an
   # https url.
   #
   #  set r [::xo::HttpRequest new -url https://learn.wu-wien.ac.at/]
   #
   ######################
   #
   # 2 AsyncHttpRequest
   #
   # AsyncHttpRequest is a subclass for HttpCore implementing
   # asynchronous HTTP requests without vwait (vwait causes
   # stalls on aolserver). AsyncHttpRequest requires to provide a listener
   # or callback object that will be notified upon success or failure of
   # the request.
   #
   # Asynchronous requests are much more complex to handle, since
   # an application (a connection thread) can submit multiple
   # asynchronous requests in parallel, which are likely to
   # finish after the current request is done. The advantages
   # are that the spooling of data can be delegated to a spooling
   # thead and the connection thread is available for handling more
   # incoming connections. The disadvantage is the higher
   # complexity, one needs means to collect the received data.
   #
   #
   # The following example uses the background delivery thread for
   # spooling and defines in this thread a listener. This generic
   # listener can be subclasses in applications.
   #
   # When using asynchronous requests, make sure to specify a listener
   # for the callbacks and delete finally the request object in the
   # bgdelivery thread.
   #
   #  ::bgdelivery do ::xo::AsyncHttpRequest new \
   #     -url "https://oacs-dotlrn-conf2007.wu-wien.ac.at/conf2007/"; \
   #     -mixin ::xo::AsyncHttpRequest::SimpleListener
   #     -proc finalize {obj status value} { my destroy }
   #
   ######################
   #
   # 3 HttpRequestTrace
   #
   # HttpRequestTrace can be used to trace one or all requests.
   # If activated, the class writes protocol data into
   # /tmp/req-<somenumber>.
   #
   # Use
   #
   #  ::xo::HttpCore instmixin add ::xo::HttpRequestTrace
   #
   # to activate trace for all requests,
   # or mixin the class into a single request to trace it.
   #


Am 03.02.10 14:50, schrieb Fenton, Brian:
> Good news - I found a public webservice at 
> http://rpc.geocoder.us/service/soap/ and ns_http works great with that with 
> my AOLserver version.
>
> So, does anybody have any advice re using an SSL version? Are sockets the way 
> to go to do this?
>
> thanks
> Brian
>
> ________________________________________
> From: AOLserver Discussion [[email protected]] On Behalf Of Fenton, 
> Brian [[email protected]]
> Sent: 03 February 2010 11:58
> To: [email protected]
> Subject: Re: [AOLSERVER] differences between ns_httppost  and sockets?
>
> 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?
>
> 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 [[email protected]] On Behalf Of Jeff 
> Rogers [[email protected]]
> Sent: 03 February 2010 07:12
> To: [email protected]
> 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 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.
>
>
> --
> 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.
>


--
Univ.Prof. Dr. Gustaf Neumann
Institute of Information Systems and New Media
WU Vienna
Augasse 2-6, A-1090 Vienna, AUSTRIA


--
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