string als parameter für POST

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
szallah
User
Beiträge: 14
Registriert: Dienstag 27. Mai 2008, 07:31

Sonntag 22. Juni 2008, 20:28

hi...
bin noch neu hier, deshalb erstmal ein "hallo" in die breite menge...

ich hab erst vor ca. 2 monaten mit dem programmieren angefangen, und stehe nun vor nem problem wo ich definitiv hilfe brauche...

also, es geht darum, von einem server daten abzufragen. zur berechnung der daten bekommt er erstmal per POST daten geliefert... die verlangt der server im hex-format...
in dem c#-programm dass dasselbe macht wird ein byte-stream erstellt, der z.b. so aussieht:
00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1B 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 07 DF 00 00 01 EF 00 00 00 03 00 00 01 06 FF FF FF FF 00 00 00 00
das was dann an den server geschickt wird ist genau dasselbe wenn man's sich mit nempacket-sniffer ansieht...

nun hab ich probehalber um das in python nachzubauen einfach nen string mit demselben inhalt gemacht...
also:

Code: Alles auswählen

string = '00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1B 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 07 DF 00 00 01 EF 00 00 00 03 00 00 01 06 FF FF FF FF 00 00 00 00 '
nun ist es leider so, dass dieser string als solche beim POST per urllib2 nicht korrekt gelesen wird, sondern, verständlicherweise, der string in hex convertiert wird... die daten die dann zum server kommen sind dann anstatt "00 0e..." sowas wie "30 30..."... es wird also jedes zeichen konvertiert, und das soll ja nicht so sein, und deshalb bekomme ich im moment auch nicht die daten die ich brauche...

im prinzip suche ich also jetzt nach nem weg den string so zu konvertieren, dass er so geschickt wird wie er im string steht, und nicht, wie im oment, vorher noch konvertiert wird.
das ganze mit dem urlencode hab ich schon zur kenntnis genommen... allerdings habe ich ja kein dictionary usw... der weg darüber scheint also wohl in meinem fall nicht zutreffend zu sein...

nundenn, weiß vielleicht jemand eine lösung für mein problem?
BlackJack

Sonntag 22. Juni 2008, 20:37

@szallah: Ich denke es handelt sich hier um ein Verständnisproblem Deinerseits. Der Server will die Daten höchstwahrscheinlich nicht als hexadezimale Zahlen mit Leerzeichen dazwischen, sondern die Bytes. Der Packetsniffer zeigt die Bytes nur so an, damit man sie als Mensch lesen kann, denn z.B. ein Nullbyte ist keinem Zeichen zugeordnet, jedenfalls nicht in den üblichen Kodierungen, und folglich könnte man das gar nicht sehen.

Was Du also senden müsstest, wäre:

Code: Alles auswählen

    data = ('\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
            '\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00'
            '\x00\x07\xdf\x00\x00\x01\xef\x00\x00\x00\x03\x00\x00\x01\x06\xff'
            '\xff\xff\xff\x00\x00\x00\x00')
szallah
User
Beiträge: 14
Registriert: Dienstag 27. Mai 2008, 07:31

Sonntag 22. Juni 2008, 20:40

ah, ok...
das ist dann wohl ne wissenslücke die nun geschlossen wurde... vielen dank... :)

darf ich noch fragen, wie du die data-variable gemacht hast? also mit meinem string als basis...
mit hex() kann man ja immer nur einzelne chars umwandeln soweit ich das verstanden habe...
lunar

Sonntag 22. Juni 2008, 20:56

BlackJack hat das einfach nur runtergeschrieben: Das ist keine Hexerei und völlig ohne irgendwelche Konverter-Tools möglich. Schau dir einfach beide Strings noch mal _ganz_ genau an, dann siehst du unverkennbare Gemeinsamkeit ;)
szallah
User
Beiträge: 14
Registriert: Dienstag 27. Mai 2008, 07:31

Sonntag 22. Juni 2008, 21:06

@lunar

ja dass das von hand geht ist mir klar... aber der sinn des programmierens ist ja, dass das alles automatisch passiert... dafür hab ich nun jedoch ne funktion ergoogelt... die macht das in beide richtungen... :)
http://aspn.activestate.com/ASPN/Cookbo ... ipe/510399

wenn mich nicht alles täuscht sind nun alle meine fragen beantwortet... scheint nun alles zu funktionieren... :)

vielen dank... :)
lunar

Sonntag 22. Juni 2008, 21:25

In diesem Fall geht das auch schneller (string ist die Zeichenkette aus deinem ersten Posting):

Code: Alles auswählen

string.replace(' ', '').decode('hex')
szallah
User
Beiträge: 14
Registriert: Dienstag 27. Mai 2008, 07:31

Sonntag 22. Juni 2008, 22:52

@lunar

vielen dank... das spart mir einige zeilen code... und umgekehrt geht's auch... vielen dank... :)
Antworten