Hi Marc, zope has a "client" deep in its core :) See lib/python/ZPublisher/Client.py for more info. I currently use a external method like this: from ZPublisher import Client def web_client(url = '', username = None, password = None, **kw): '''access http servers''' class gen_res: __allow_access_to_unprotected_subobjects__=1 f=gen_res() if kw: f.headers,f.body=Client.call(url,username,password,kw) else: f.headers,f.body=Client.call(url,username,password) return(f) And use it like this: <dtml-with "web_client('http://server/uri')"> <dtml-var body> </dtml-with> In Client.py are also methods and functions to map arguments to a POST request as you wish. I think, the above could be a starting point for you. HTH Tino Wildenhain --On Mittwoch, 2. Mai 2001 12:12 +0200 Marc Fischer <marcbpc@gmx.de> wrote:
Hi Danny,
first of all thank you for your detailed help!!! That is nearly, what I am looking for, but one problem exists: The page I want to extract (you are right ... its on an external server) does not work with passing the variables in the url. I mean ...
http://server?x=a&y=b does not work.
I need to do it with a form like:
<form action="http://server" method=POST> <input type=hidden name="x" value="a"> <input type=hidden name="y" value="b"> <input type=submit> </form>
That's my big big problem. Btw, ... its legal :-)))
Marc
-----Ursprungliche Nachricht----- Von: Danny William Adair [mailto:Danny@Adair.net] Gesendet: Mittwoch, 2. Mai 2001 01:26 An: Marc Fischer; Paula Mangas Cc: zope@zope.org Betreff: Re: [Zope] Source from form result.
Hi Marc,
When you submit a form to one of your DTML methods or documents, all the form variables will be available without any further work to be done (REQUEST object, see docs). But if I get you right, you are not submitting your form to a method of your own. So things are a bit different here.
As I understand it, you are submitting your form to someone else's server (since otherwise you would produce the output yourself). Maybe you're providing an input form that is directed to a search engine, or something similar.
-------------------------------------------- <form action="http://server" method=POST> <input type=hidden name="x" value="a"> <input type=hidden name="y" value="b">
<input type="text" name="myInput">
<input type=submit> </form> --------------------------------------------
If so, then you should take a look at the "KebasData" Product: http://www.zope.org/Members/kedai/KebasData
Just instantiate a KebasData object, let's say "results". Take a look at the product's documentation to see how you can extract the relevant code from the external server's result page. I'll try to get you started right away:
Set the regular expression patterns properly, start with
.*
as the search pattern and leave the rest blank ("url" will be set by a DTML method you create, see below), then you'll get the entire external page, you can change that later to fit your needs.
Then create a DTML method next to it, lets say "getResults". It could look like this:
<dtml-var standard_html_header> <h2>RESULTS</h3> <dtml-with results> <dtml-call "REQUEST.set('new_url', 'http://server?search=' + myInput)"> <dtml-call "get_matched(new_url)"> <dtml-in match> <dtml-var result><br/> </dtml-in> </dtml-with> <dtml-var standard_html_footer>
This will fetch the page you want to display by calling "get_matched(new_url)", you construct that new_url dynamically, using your form variable "myInput". Then it iterates through the results list and spits out the parts that matched your query, appending a <br/> after each match (if you started with .* as the pattern, the list will only have one item, holding the complete page).
Oh, right: your DTML method should have a proxy role that has the right to "change KebasData" (or maybe even "View management_screens"?) on the KebasData object "results", since it calls its function "get_matched", which is usually only called by clicking "Initialize!" in the management screen of the KebasData object.
Now you just send your form to "getResults" (instead of the external server directly), and let your DTML method do the rest:
-------------------------------------------- <form action="getResults" method=POST> <input type=hidden name="x" value="a"> <input type=hidden name="y" value="b">
<input type="text" name="myInput">
<input type=submit> </form> --------------------------------------------
Later, you could put the "getResults" code in a python script, then it's easier to do further processing with your fetched data.
hth, Danny
P.S.: Check the legal stuff before extracting other people's pages ;-)
-----Ursprungliche Nachricht----- Von: zope-admin@zope.org [mailto:zope-admin@zope.org]Im Auftrag von Marc Fischer Gesendet: Dienstag, 1. Mai 2001 11.43p An: Paula Mangas; Marc Fischer Cc: zope@zope.org Betreff: AW: [Zope] Source from form result.
Hi,
I think there was an understanding problem. I want to get the source code of the result that is displayed in the browser, after klicking on the submit button. I want to be able to handle this source perhabs to create a dtmlmethod wiht it, or do some string extractions with it.
-----Ursprungliche Nachricht----- Von: Paula Mangas [mailto:pamm@students.si.fct.unl.pt] Gesendet: Dienstag, 1. Mai 2001 13:25 An: Marc Fischer Cc: zope@zope.org Betreff: Re: [Zope] Source from form result.
On Tue, 1 May 2001, Marc Fischer wrote:
> Hi, > > I want to get the HTML result from a form into a dtml method. So I need a > way to handle this result, but HOW. > > The form ist like this: > > <form action="http://server" method=POST> > <input type=hidden name="x" value="a"> > <input type=hidden name="y" value="b"> > <input type=submit> > </form> > > If I klick on submit, I get the result displayed in the Browser, but I > cannot work with it. > Perhaps someone could help me???
Hi,
I think that, if you try <form action="http://server/the_method_you_want_to_call" method=POST>
it will work.
Paula
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )