[erl.] HTTPSend Error 400

Alle Fragen zur Netzwerkkommunikation
Antworten
LazyBone
Beiträge: 6
Registriert: Do 21. Apr 2016, 14:20

[erl.] HTTPSend Error 400

Beitrag von LazyBone »

Hey Forum!
Nach etwaiger Suche lande ich mal wieder hier und weiß nicht weiter....

Möchte mir Daten per Telegram aufs Handy senden und nutze dazu die TelegramApi.
Die "Sendung" nehme ich mit HTTPSend vor.

Exemplarisch:

Code: Alles auswählen

    ...
    BotAnswer := TStringlist.Create;
    HTTP := THTTPSend.Create;
    BotAnswer.Add('Accept: text/html');
    BotAnswer.Add('Accept-Charset: ISO-8859-2,utf-8');
    HTTP.Headers.AddStrings(BotAnswer);
    BotAnswer.Clear;
    ...
    url_str := 'https://api.telegram.org/'+BotID+'/sendmessage?chat_id='+user_id+'&text='+tmessage;
    HTTP.HTTPMethod('GET', url_str);
 


Manchmal funktioniert es, manchmal nicht.
Wenn es nicht funktioniert, ist die Antwort

Code: Alles auswählen

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.10.0</center>
</body>
</html>


oder

Code: Alles auswählen

 
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.9.1</center>
</body>
</html>


Ersetze vor dem Senden schon alle Umlaute durch entsprechende Codes ...

Code: Alles auswählen

      newline = '%0D%0A';
      sz_code = '%C3%9F';// ß= 0X00DF = #223
      aes_code = '%C3%A4';// ä= 0X00E4 = #228


und bin mir trotzdem nicht sicher, ob es am charset liegt.
Wenn ich die Adresse ins Clipboard kopiere und in FF direkt eingebe, funktioniert es. Von daher schätze ich, es hat irgendetwas mit HTTPSend zu tun.

Jemand ähnliche Erfahrungen gemacht oder einen Tipp?
( den Artikel http://forum.lazarus.freepascal.org/index.php?topic=12737.0 habe ich schon gefunden, half mir in diesem Falle jedoch nicht weiter... :(

Danke für Eure Zeit!
____
Lazarus V1.6 (2016-02-14)
FPC: 3.0.0
x86_64-win64-win32/win64
Zuletzt geändert von LazyBone am Do 9. Jun 2016, 15:00, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: HTTPSend Error 400

Beitrag von theo »

LazyBone hat geschrieben:( den Artikel http://forum.lazarus.freepascal.org/index.php?topic=12737.0 habe ich schon gefunden, half mir in diesem Falle jedoch nicht weiter... :(


Vielleicht doch.
Dort steht "This can happen if you go to a https page without the SSL."

Hast du ssl_openssl eingebunden und funktioniert das (DLL vorhanden)?
http://synapse.ararat.cz/doku.php/publi ... :sslplugin

LazyBone
Beiträge: 6
Registriert: Do 21. Apr 2016, 14:20

Re: HTTPSend Error 400

Beitrag von LazyBone »

Hallo theo,
danke für die Info, aber stimmt, das vergaß ich zu erwähnen. die unit ssl_openssl ist auch eingebunden und es funktioniert grundsätzlich... falls es etwas mit ssl zu tun haben sollte, was könnte man denn dagegen tun?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: HTTPSend Error 400

Beitrag von theo »

Keine Ahnung.
Vielleicht mal EncodeURL aus synacode verwenden für die tmessage etc.

LazyBone
Beiträge: 6
Registriert: Do 21. Apr 2016, 14:20

Re: HTTPSend Error 400

Beitrag von LazyBone »

Vielen Dank, theo, du bist ein Held!
Ich wusste leider nichts von der tollen Cleanup-Funktion.
Jetzt kann ich mir sicher sein, dass es irgednwie an der Codierung liegt, denn jetzt sendet er alle Nachrichten, nicht nur spezielle. Jedoch werden nun bei dieser Variante alle Umlaute gefragezeichnet :(
Aber da findet sich ja vielleicht noch ein workaround...
Auch die Codierung der umlaute wird nun übergangen, das finde ich recht h%C3%A4sslich, aber vielleicht finde ich nun einen Weg.

Danke vielmals!!

Antworten