Seite 1 von 2

LoadFromUrl() - Alaska-Version

Verfasst: Mo, 04. Aug 2014 16:35
von Jan
Kennt sich jemand damit aus? Also nicht das von Phil, sondern von Alaska.

Wenn ich eine URL per LoadFromUrl übergebe

Code: Alles auswählen

cRueckgabe := LoadFromUrl("http://user:kennwort@192.168.2.227:8080/search/?archive=BennoContainer&query=((Sender:'wer@auchimmer.de') AND (Recipient:weranderes@auchimmer.de))&filterQuery=(*)&limit=50000&full=(true)")
bekomme ich immer 404 zurück mit der Meldung "The requested URL /search/ was not found on this server". Gebe ich aber die URL

Code: Alles auswählen

http://user:kennwort@192.168.2.227:8080/search/?archive=BennoContainer&query=((Sender:'wer@auchimmer.de') AND (Recipient:weranderes@auchimmer.de))&filterQuery=(*)&limit=50000&full=(true)
direkt in den Browser ein, kommt das korrekte Ergebnis. Wo liegt da der Fehler? Lt. der Doku sollte der String eigentlich gehen.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Mo, 04. Aug 2014 16:46
von brandelh
auf den ersten Blick bin ich zwar etwas erschrocken, aber es ist ein normaler GET Aufruf ... wenn ich auch sowas komplexes noch nie gemacht habe ...
Du solltest das ganze mal gegen einen eigenen Webserver laufen lassen und in der LOG nachsehen, was dort ankommt.
Oder Netzwerkprotokoll ansehen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Mo, 04. Aug 2014 18:09
von georg
Hallo, Jan -


versuche mal, die Leerzeichen durch "+" zu ersetzen. Ich vermute, dass die den String "aufbrechen", während der Browser damit umgehen kann, indem er sie ersetzt.

Alternativ: bei FireFox den FireBug als AddOn installieren und mal anschauen, wie FireFox den String weitergibt (Persist, Net -> All und dann wohl Post) Danach die URL anklicken und mal anschauen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Mo, 04. Aug 2014 20:15
von brandelh
das gibt der Browser weiter mit seinem GET Aufruf:

Code: Alles auswählen

GET /search/?archive=BennoContainer&query=((Sender:%27wer@auchimmer.de%27)%20AND%20(Recipient:weranderes@auchimmer.de))&filterQuery=(*)&limit=50000&full=(true)
' => %27
Blank => %20
also das ASCII Zeichen in HEX-Form

Ich habe einfach deine URL mit LOCALHOST an meinen lokalen Apache gesandt.
Zunächst fragte er ob ich auch ohne Kennwort weitergehen soll ...
Dann stand das in der LOG Datei:
127.0.0.1 - - [04/Aug/2014:20:11:51 +0200] "GET /search/?archive=BennoContainer&query=((Sender:%27wer@auchimmer.de%27)%20AND%20(Recipient:weranderes@auchimmer.de))&filterQuery=(*)&limit=50000&full=(true) HTTP/1.1" 404 320
:arrow: C:\Apache\logs\access.log

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 8:35
von Jan
Hallo Hubert,

das Ersetzen von " "->"%20" und "'"->"%27" hat leider keine Änderung gebracht. Er moniert immer noch per 404, das er die url "/search/" nicht finden könne.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 9:17
von Scarmo
Hallo Jan

Was passiert denn, wenn Du (testweise) gar keine Parameter mitgibst? Findet er dann die Adresse?

Also nur:
LoadFromUrl("http://user:kennwort@192.168.2.227:8080/search/")

Gruss
Marco

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 9:42
von brandelh
Jan hat geschrieben:Hallo Hubert,
das Ersetzen von " "->"%20" und "'"->"%27" hat leider keine Änderung gebracht. Er moniert immer noch per 404, das er die url "/string/" nicht finden könne.
Jan
von "/string/" war nie die Rede !

Ist das eventuell eine Xbase++ Variable, die du nicht aufgelöst hast ? ;-)

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 9:46
von Jan
Marco,

dann bekomme ich einfach nur ein NIL zurück.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 9:48
von Jan
Hubert,

mein Fehler. Das muß natürlich "/search/" heißen, wie ich das auch in meinem Eingangsposting geschrieben hatte.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 10:41
von Wolfgang Ciriack
Hast du mal Georgs Vorschlag probiert, das wäre auch mein Tipp.
versuche mal, die Leerzeichen durch "+" zu ersetzen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 10:58
von brandelh
Ich habe doch oben gezeigt, dass Leerzeichen bei der URL vom Browser mit %20 ersetzt werden.

PS: hast du es schon mal mit dem LoadFromUrl() von Phil versucht ?
Oder mit WGET das hier schon gelegentlich erwähnt wurde ?

Ich vermute du hast keinen Zugriff auf die LOG Files des Web-Servers ... wenn doch, sieh nach was dort steht.

Da /search/ moniert wird, müsste die Anmeldung am Server (also User, Kennwort, Port etc.) stimmen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:01
von Scarmo
Und was passiert, wenn Du im Browser nur die Seite aufrufst (http://user:kennwort@192.168.2.227:8080/search/)? Erscheint da irgendetwas oder ist das nur eine leere Seite?

Marco

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:06
von Jan
hubert,

was soll ich da jetzt noch sagen? Ich hab doch oben geschrieben, das ich Leerzeichen und Hochkommata ersetzt habe! Und daß das keine Änderung gebracht hat.

Und nein, mit Phils Klasse habe ich es nicht versucht. Das Problem ist, das ich da dann wieder Zusatzbibliotheken brauche. Was ich möglichst vermeiden will. Und wenn ein LoadFromUrl() denn man schon in Xbase++ drin ist ... warum nicht auch nutzen? Ich mache das im Moment mit TServerXMLHTTPRequest() von Pablo. Das ist aber recht umständlich, und auch ziemlich langsam. Daher mein Versuch, das auf Xbase++ pur umzubauen.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:07
von Jan
Marco,

leere Seite.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:17
von Jan
Georg und Wolfgang,

"+" statt " " ändert nicht, url "/search/" nicht gefunden.

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:31
von brandelh
Jan hat geschrieben:hubert,
was soll ich da jetzt noch sagen? Ich hab doch oben geschrieben, das ich Leerzeichen und Hochkommata ersetzt habe! Und daß das keine Änderung gebracht hat.
weiß ich auch nicht ... was mir bei der RATEREI noch einfällt ist, dass ich NIE ein "/" am Ende habe. Versuche es doch mal mit "...8080/search?archive..."

Aber ohne genaue Fehlerinfos kann niemand helfen ;-)

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:32
von georg
Hallo, Jan -

LoadFromUrl( <cURL> , ;
[<nPortNumber>], ;
[<nProtocol>] , ;
[<cProxyUrl>] , ;
[<acByPass> ] , ;
[<cMethod>] , ;

[<cPostString>] ) --> cWebContent | NIL
Der Port, in Deinem Fall 8080, wird als zweiter Parameter und nicht als Teil der URL übergeben. Ich vermute, dass LoadFromURL() einen Request an Port 80 schickt, und von dort einfach ignoriert wird.

Sorry, ich sehe gerade, dass der Port auch als Teil der URL übergeben werden kann. Ich würde es aber trotzdem mal versuchen, ihn über den zweiten Parameter mitzugeben, und aus der URL wegzulassen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:35
von Jan
Georg,

die Hilfe sagt, daß der Port in der URL angegeben werden kann.
<cURL>

The URL of the document to be loaded. It is a character string that must be formatted in the following way:

[<protocol>://][<username>:<password>@][www.]destination[:<port>][/<target>]

All elements of the string are optional except the destination. All elements are taken into consideration when the HTTP connection is established. However, some of them may be overridden if other parameters are passed to the function.
Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:37
von georg
Hallo, Jan -


ja, habe ich auch gesehen und nachgetragen. Nur warst Du schneller. Trotzdem würde ich es mal auf diesem Weg versuchen.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:38
von Jan
Hubert,

gute Idee, bringt aber nichts. Jetzt findet er die url "/search" nicht mehr.

Und was soll ich an Fehlerinfos mehr sagen als das, was ich vom Server zurück bekomme? Ich habe ja auch nicht mehr!

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:41
von Jan
Georg,

jetzt bin ich echt irritiert. Wenn ich den Port angebe, bekomme ich ein NIL zurück ... Was soll denn das jetzt???

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 11:49
von georg
Hallo, Jan -


Dein Problem hat zwei Komponenten:

abweichender Port
abweichende Parameter

Lies Dir doch bitte mal das hier durch: https://de.wikipedia.org/wiki/URL-Encoding

Die Leerzeichen in der URL stellen ein Problem dar, da es möglich ist (!), dass LoadFromURL() sich wie ein Browser verhält und hier die Weitergabe der URL abbricht, und daher Deine Anforderung nicht ausgeführt werden kann, da der Server einen unvollständigen Paramter-Satz erhält. Leider schweigt sich Alaska in der Dokumentation dazu aus.

Für einen grundsätzlichen Test wäre eine kürzere URL ohne Sonderzeichen nicht schlecht, weil Du dann diesen Einflussfaktor ausschliessen kannst.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 12:11
von Jan
Hallo Georg,

OK, das hat mich jetzt einen Schritt weiter gebracht. Ich habe mal de ganzen String zusammen gekürzt, so das wirklich kein Leerzeichen und kein Hochkomma mehr dirn war (ist ja egal, ob die Abfrage dann noch sinnvoll ist). Das gab ersteinmal die gleiche Rückmeldung.

Dann habe ich mir den Wikipedia-Artikel angesehen. Und mal mit dem Mut der Verzweiflung das "?" durch ein "%3F" ersetzt. Ist ja ansich Schwachsinn, denn das "?" ist eigentlich OK. Aber siehe da: Plötzlich ist die Rückmeldung eine andere! Jetzt war nämlich nicht mehr nur "/search/" nicht mehr unbekannt, sondern der gesamte Rest des Strings einschl. "/search/" stand in dieser Rückmeldung drin.

Nun gut, die Rückgabe hat das "&" noch mit "amp;" ersetzt. Also auch mal das umgebaut in "%26". Leider hat das keine Besserung gebracht ...

Jan

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 12:22
von georg
Hallo, Jan -


ich verwende ja wget, und da muss ich solche Strings auch encodieren. Das sieht etwa so aus:

Code: Alles auswählen

aTrans := {;
  {":", "%3A"},;
  {"/", "%2F"},;
  {"[", "%5B"},;
  {"]", "%5D"},;
  {"(", "%28"},;
  {")", "%29"},;
  {Chr(13), "%0D"},;
  {Chr(10), "%0A"};
}

Function URLEncode(cURL)
   Local nI, nLen
   nLen := Len(aTrans)
   FOR nI := 1 TO nLen
      cURL := StrTran(cURL, aTrans[nI, 1], aTrans[nI, 2])
   NEXT
RETURN(cURL)
Das habe ich vor Jahren mal programmiert, weil ich bei POST-Operationen bei einigen Diensten Probleme hatte. Wenn ich mir meinen Code und Dein Beispiel ansehe, dann sind da auch z.B. ( oder ) vorhanden - also hier würde ich mal ansetzen.

Wobei ich nur den Teil der URL durch URLEncode() durchnudeln würde, der Parameter enthält.

Re: LoadFromUrl() - Alaska-Version

Verfasst: Di, 05. Aug 2014 12:40
von brandelh
Jan hat geschrieben:Und mal mit dem Mut der Verzweiflung das "?" durch ein "%3F" ersetzt. Ist ja ansich Schwachsinn, denn das "?" ist eigentlich OK.
Aber siehe da: Plötzlich ist die Rückmeldung eine andere! Jetzt war nämlich nicht mehr nur "/search/" nicht mehr unbekannt, sondern der gesamte Rest des Strings einschl. "/search/" stand in dieser Rückmeldung drin.
das ist ja auch logisch, denn das "?" trennt BEFEHL von PARAMETERN für den Befehl.
Somit hast du den Befehl verlängert ...

Du musst raus bekommen, was genau der Server erhält - im Unterschied zum direkten Browser aufruf.
Wenn du an die Protokolle nicht heran kommst (weil sie auf einem fremden Server liegen), dann musst du dir einen eigenen installieren - aus der LUFT fällt die Lösung nicht ;-)

PS: ich könnte dir auf Wunsch einen nennen, auf den ich Zugreifen kann und die LOG dann durchgeben ;-)