Avatar billede kroning Nybegynder
12. januar 2014 - 17:07 Der er 7 kommentarer og
1 løsning

Indy idHTTP problem

Jeg har dette link:
http://www.minserver.dk/testnoget.php?navn=etøtest

Hvis jeg kalder det direkte i Internet Explore så virker det og jeg får denne linie i apache loggen:
/testnoget.php?navn=et\xf8test HTTP/1.1" 200 395

Hvis jeg kalder det således:
var
pa : string;
begin
pa:='http://www.minserver.dk/testnoget.php?navn=etøtest';
IdHTTP1.Get(pa);
end;

Så virker det ikke og jeg får dette linie i apache loggen:
/testnoget.php?navn=et?test HTTP/1.1" 200 395

Som det kan ses er det ø´et der er problemet, jeg har prøvet alt muligt med UTF8Encode() og TIdURI.URLEncode() uden at det hjælper.
Jeg kan nævne at det heller ikke virker hvis jeg bruger linket direkte i Chrome eller Firefox.

Jeg bruger Delphi 7 og Indy 10.5.8

Nogle ideer?
Avatar billede mbsnet Nybegynder
12. januar 2014 - 19:16 #1
Så længe det er efter "?" er det querystring delen af URL.
Der bruger man HTTP encoding (ikke forveksle med HTML encode
altså "%" efterfulgt af to hex tegn, så %20 svarer til #$32;

Forsøg at http encode i stedet...
mvh mbs
Avatar billede mbsnet Nybegynder
12. januar 2014 - 19:17 #2
her lidt kode fra mit eget system, men tag et kig på httpApp...


function httpEnc(p:pChar;aLen:numb=NONE):str; //from httpApp, modified
const NoConversion=tNumbs+['A'..'Z','a'..'z','*',COMAT,DOT,UNDERSCORE,DASH,DOLLAR,EXCL,APOS,PAR_L,PAR_R];
var Rp:pChar;
begin
if not chkLen(p,aLen) then begin result:=NOTHING;exit end;
setLength(Result,aLen*3);Rp:=pChar(Result);
while p^<>NULL do begin
  if p^ in NoConversion then Rp^:=p^ else
  if p^=SPACE then Rp^:='+' else begin formatBuf(Rp^,3,'%%%.2x',6,[pByte(p)^]);inc(Rp,2) end;inc(Rp);inc(p)
end;setLength(Result,Rp-pChar(Result));
end;
Avatar billede kroning Nybegynder
12. januar 2014 - 19:35 #3
Med HTTPEncode får jeg dette resultat i apache loggen:
/testnoget.php?navn=et%F8test HTTP/1.1" 200 395

og det er stadig ikke det samme som med Internet Explore.
Avatar billede mbsnet Nybegynder
12. januar 2014 - 19:42 #4
hehe ok så replace "%" med "\x"
//mbs
Avatar billede kroning Nybegynder
12. januar 2014 - 19:49 #5
Ja det var også noget af det første jeg prøvede med det virker ikke så kommer der bare 2 \\ i loggen, altså:
navn=et\\xf8test
og så virker det ikke.

Men jeg sidder lige og roder lidt mere med HTTPEncode og det ser ud til at det måske virker alligevel selv om apache loggen ikke skriver det samme.

Vender snart tilbage.
Avatar billede mbsnet Nybegynder
12. januar 2014 - 19:51 #6
ok lyder spændende. bruger selv asp så ved ikke noget om apache
Avatar billede kroning Nybegynder
12. januar 2014 - 20:17 #7
Det virker med HTTPEncode så smid et svar :-)
Avatar billede mbsnet Nybegynder
12. januar 2014 - 20:21 #8
nice
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester