send message - http

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

send message - http

Beitrag von Spike1986 » 08.10.2013 18:45:10

wget -O /dev/null 'http://localhost:80/web/message?test&type=1'

hiermit sende ich die Message "test"

Nun wollte ich gern wisse wie ich ein Parameter hinzufügen kann?

test="Hallo"
normal gebe ich immer $test an und Hallo wird genommen.

Nur klappt das nicht
wget -O /dev/null 'http://localhost:80/web/message?$test&type=1'

es wird dann $test angezeigt. GIbt es dazu eine Lösung?

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: send message - http

Beitrag von syssi » 08.10.2013 18:52:05

Wuerdest du den String in doppelte Anfuehrungszeichen setzen, dann wuerde es funktionieren. Durch die einfachen wird der eingeschlossene Text als statisch angesehen.

Code: Alles auswählen

FOO=bar
$ echo "$FOO"
bar
# vs.
$ echo '$FOO'
$FOO

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: send message - http

Beitrag von Spike1986 » 08.10.2013 18:57:09

bei echo klappt es.

Aber bei wget nicht.

wget -O /dev/null 'http://localhost:80/web/message?"$test"&type=1'
"$test" wird angezeigt

wget -O /dev/null 'http://localhost:80/web/message?'$test'&type=1'
wget: not an http or ftp url: ist --- Fehler Meldung

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: send message - http

Beitrag von 4A4B » 08.10.2013 20:29:21

Die gesamte URL muss in doppelte Anführungszeichen gesetzt werden

Code: Alles auswählen

wget -O /dev/null "http://localhost:80/web/message?$test&type=1"

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: send message - http

Beitrag von Spike1986 » 09.10.2013 10:52:04

Code: Alles auswählen

wget: server returned error: HTTP/1.1 400 Bad Request

Code: Alles auswählen

wget -O /dev/null "http://localhost:80/web/message?text=$test&type=1"

wget -O /dev/null "http://localhost:80/web/message?$test&type=1"
scheint wohl auf Receiver nicht zu klappen

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: send message - http

Beitrag von syssi » 09.10.2013 11:39:56

Du solltest den Inhalt der Variable "test" entsprechend encodieren. Zum Beispiel sind in URLs keine Leerzeichen erlaubt. Stattdessen wird der Wert %20 fuer ein Leerzeichen genutzt. Hier ein Beispiel:

Code: Alles auswählen

$ test="test äöü test"
$ echo -n $test | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg'
test%20%C3%A4%C3%B6%C3%BC%20test

Spike1986
Beiträge: 153
Registriert: 25.01.2012 20:16:47

Re: send message - http

Beitrag von Spike1986 » 09.10.2013 17:20:16

stimmt syssi.

So der Receiver hat von Grund auf kein Pearl. Hatte es versucht manuell zu installieren, nach einer Anleitung.

Code: Alles auswählen

[code]/usr/script/script2.sh: line 211: /bin/perl: cannot execute binary file
[/code]

rechte hab ich auf 755 gesetzt

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: send message - http

Beitrag von Cae » 09.10.2013 19:57:19

Ich kann's ja ehrlich nicht glauben, dass dermassen einen abbrechen muss, um das im awk zum Laufen zu bekommen, aber

Code: Alles auswählen

$ awk 'BEGIN{for(i=0;i<256;i++){t[sprintf("%c",i)]=i}}{m=split($0,l,"");for(i=1;i<=m;i++){if(l[i]!~/[a-zA-Z0-9-]/)printf("%%%02X",t[l[i]]);else printf("%c",l[i])};print""}'
tut hoffentlich das Escaping in derselben Weise. awk ist in POSIX, sollte also eigentlich auf dem System drauf sein. Falls nicht, mach's in C:

Code: Alles auswählen

#include <stdio.h>

int main(void) {
	char buf;

	while (1==fread(&buf, 1, 1, stdin)) {
		if (
			('a' <= buf && 'z' >= buf) ||
			('A' <= buf && 'Z' >= buf) ||
			('0' <= buf && '9' >= buf) ||
			'-' == buf || '\n' == buf
		)
			putchar(buf);
		else
			printf("%%%02X", buf);
	}

	return 0;
}
Musst halt gucken, welche Zielarchitektur das ist. Und so rein theoretisch koennte es Zeichensaetze geben, wo a nicht kleiner als z ist, dann geht das natuerlich auch kaputt. Oder wenn irgendwelche nicht-validen Zeichen dazwischen sind.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: send message - http

Beitrag von syssi » 09.10.2013 20:09:50

Hier ein Thread mit vielen Loesungen: http://stackoverflow.com/a/10660730

Besonders gefaellt mir:

Code: Alles auswählen

rawurlencode() {
  local string="${1}"
  local strlen=${#string}
  local encoded=""

  for (( pos=0 ; pos<strlen ; pos++ )); do
     c=${string:$pos:1}
     case "$c" in
        [-_.~a-zA-Z0-9] ) o="${c}" ;;
        * )               printf -v o '%%%02x' "'$c"
     esac
     encoded+="${o}"
  done
  echo "${encoded}"    # You can either set a return variable (FASTER) 
  REPLY="${encoded}"   #+or echo the result (EASIER)... or both... :p
}

# easier:  
echo http://url/q?=$( rawurlencode "$args" )
# faster: 
rawurlencode "$args"; echo http://url/q?${REPLY}

Antworten