Socket XML-Daten und Parameter an Server schicken

sheepy

Mitglied
Hey Leute,
ich möchte gerne mittels eines HTTP-Sockets XML Daten und einen Parameter an einen Server schicken.

Ich habe hier folgenden Code:

Java:
try {
//XML, das übermittelt werden soll
          String xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
          "<feedback>"+
          "<type>wrong_position</type>"+
          "<link href=\"http://api.qype.com/v1/places/67370\" rel=\"http://schemas.qype.com/place\"/>"+
          "<comment><![CDATA[This place contains offending text]]></comment>"+
        "</feedback>";
 
          //Create socket
          String hostname = "api.qype.com";
          int port = 80;
          Socket sock = new Socket(hostname, port);
          //Send header
          String path = "/v1/feedbacks";
          System.out.println(path);
          BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
          // You can use "UTF8" for compatibility with the Microsoft virtual machine.
          wr.write("POST" + path + " HTTP/1.0\r\n");
          wr.write("Host: api.qype.com\r\n");
          wr.write("Content-Length: " + xmldata.length() + "\r\n");
          wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
          wr.write("\r\n");
    			
          //Send data
          wr.write(xmldata);
          wr.flush();
    			
          // Response
          BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
          String line;
          while((line = rd.readLine()) != null)
    	System.out.println(line);
        } catch (Exception e) {
          e.printStackTrace();
        }

Die XML-Datei wird ja denk ich mal überliefert.

Nun ist die Frage wie ich den Parameter übergebe.
Das Socket benötige ich um an die API von Qype etwas senden zu können
(siehe hier)
Der Parameter soll ein Autorisierungstoken von OAuth sein.

Ich habe es schon versucht, indem ich den Parameter einfach an die URI angehängt habe. Doch scheinbar geht dies nicht. (ich bekomme immer einen 401-Error "Invalid OAuth Request")

Hat da jemand eine Idee? 🙂

Grüße sHeepy
 
Zuletzt bearbeitet:
Ich habe es schon versucht, indem ich den Parameter einfach an die URI angehängt habe.
Laut Spezi zulässig. OAuth bringt auch eigene Authorization-Header mit. Beispiel hier:
RFC 5849 - The OAuth 1.0 Protocol
Doch scheinbar geht dies nicht. (ich bekomme immer einen 401-Error "Invalid OAuth Request")
Den bekommst Du, wenn das token ungültig, weil z. B. unauthorisiert ist oder die Signatur verkehrt ist.
Hat da jemand eine Idee? 🙂
  • Hast Du den "OAuth-dance" ausgeführt und ein "echtes" access-token erhalten?
  • Hast Du den Request mal gegen die Qype OAuth-Test-API gefahren?
  • Hast Du die Requests ordnungsgemäß signiert?
Du kannst nicht einfach einen "Parameter" übergeben, sondern musst den Request auf eine recht komplexe Art signieren.

Ich habe es beispielsweise nicht hinbekommen, einen Request gegen die Test-URL von qype mit dem OAuth-Java-Client von oauth.google.com zu signieren, obwohl ich ein echtes Access-Token habe. :noe:

Read/Write Access [Qype API Wiki]
 
Zuletzt bearbeitet:
Hey,
einen Accesstoken habe ich. Das habe ich alles mit der Javalib. oauth-signpost erledigt. Drum dachte ich eigentlich das ein normales Socket genügen würde und ich den verifizierten token einfach als Parameter übergeben kann.

In der Wiki steht ja eigentlich auch das dieser Parameter optional ist.Sodass ich eigentlich auch als anonymer Benutzer kommentieren könnte :mhnm:

//EDIT den Request auf die Testseite habe ich auch mit einer signpostmethode erledigt. Allerdings geschieht dies ja alles mit GET. Ich habe keine Ahnung wie ich das ganze mit POST erledigen soll.


Gruß sHeepy
 
Zuletzt bearbeitet:
Das habe ich alles mit der Javalib. oauth-signpost erledigt.
Die kenne ich nicht; ich hatte den Code aus dem Google-Code Link aus der OAuth verwendet.

In der Wiki steht ja eigentlich auch das dieser Parameter optional ist.Sodass ich eigentlich auch als anonymer Benutzer kommentieren könnte :mhnm:
In der Tat verwirrend. Ich vermute aber, dass der Parameter allenfalls "technisch" optional ist.

//EDIT den Request auf die Testseite habe ich auch mit einer signpostmethode erledigt.
Allerdings geschieht dies ja alles mit GET. Ich habe keine Ahnung wie ich das ganze mit POST erledigen soll.
Der Google-Code bemüht sich nach Kräften, das Anhängen von OAuth-Parametern transparent zu machen. Da hat's z. B. ein Flag, wo die OAuth-Parameter auftauchen sollen, so dass man sie nicht explizit selbst setzen muss. Da würde es dann keine Rolle spielen, ob es sich bei dem Request um einen GET oder eine POST handelt.

Aber halt mich doch mal über Dein Fortschritte auf dem Laufenden.
 

Neue Themen


Zurück
Oben