2016-04-29 4 views
2

Der Versuch, URI-Bibliothek verwenden, um JSON im richtigen Format für Eventbrite Batch-Endpunkt zu generieren, aber nicht die richtige Codierung von URI-Bibliothek.Json zu URL-Codierung Ruby

url = URI.escape('{"method":"GET", "relative_url":"users/me"},{"method":"GET", "relative_url":"users/me/owned_events/"},{"method":"GET", "relative_url":"users/me/owned_events/?page=2"}') 

=>%7B%22method%22:%22GET%22,%20%22relative_url%22:%22users/me%22%7D, 
%7B%22method%22:%22GET%22,%20%22relative_url%22:%22users/me/owned_events/%22%7D, 
%7B%22method%22:%22GET%22,%20%22relative_url%22:%22users/me/owned_events/?page=2%22%7D 

Dies ist die Codierung erfordern:

%5B+++++%7B%22method%22%3A%22GET%22%2C+%22relative_url%22%3A%22users%2Fme 
%22%7D%2C+++++%7B%22method%22%3A%22GET%22%2C+%22relative_url%22%3A 
%22users%2Fme%2Fowned_events%2F%22%7D%2C+++++%7B%22method%22%3A%22GET 
%22%2C+%22relative_url%22%3A%22users%2Fme%2Fowned_events%2F%3Fpage%3D2%22%7D+%5D 
+1

Diese sehen mit 'CGI.escape' und' CGI.unescape' genauso aus, nur die "benötigte Kodierung" hat Leerzeichen und Zeilenumbrüche. Sind Sie sicher, dass dies die Ursache für Ihr Problem ist? Es kann sehr gut nicht sein .. – AmitA

+0

Ich bin sicher, das ist die Quelle, wie ich Anfragen mit der erforderlichen Codierung erfolgreich versucht haben Sie können die API hier versuchen: https://www.eventbriteapi.com/v3/batch/ – Max

+0

Ich kann Benutze den Link nicht, da ich kein Token habe. Ich glaube jedoch, dass Sie eine POST-Anfrage senden müssen, keine GET-Anfrage, so dass die Kodierung mit URI.escape nichts ist, was Sie tun müssen. Der URI-Endpunkt sollte einfach "eventbriteapi.com/v3/batch" lauten und Sie sollten das Array von JSONs über POST senden. – AmitA

Antwort

2

Ich glaube, Sie haben vergessen, Ihre JSON-Objekte in einem Array zu umschließen (die eckigen Klammern beachten):

cgi.escape (‘ [{"method": "GET", "relative_url": "Benutzer/me"}, {"Methode": "GET", "relative_url": "users/me/owned_events /"}, {"Methode" : "GET", "relative_url": "Benutzer/Ich/Owned_Events /? Seite = 2"}] ')

Ergebnisse in:

% 5B% 7B% 22method% 22% 3A% 22GET% 22% 2C +% 22relative_url% 22% 3A% 22users% 2Fme% 22% 7D% 2C% 7B% 22Methode% 22% 3A% 22GET% 22% 2C +% 22Relative_url% 22% 3A% 22User% 2Fme% 2Fanked_Events% 2F% 22% 7D% 2C% 7B% 22Methode% 22% 3A% 22GET% 22% 2C +% 22Relative_url% 22% 3A% 22users% 2Fme% 2Fowned_events% 2F% 3Fpage% 3D2% 22% 7D% 5D

die die gleichen wie Ihr gewünschtes Ergebnis ist, geben oder weiße Flächen nehmen.

Ich bin mir nicht sicher, warum Sie URI dafür übrigens verwenden. Die URI sollte einfach eventbriteapi.com/v3/batch sein, soweit ich es verstehe. Basierend auf ihrem documentation scheint es so, als ob die Payload, die Sie senden, über eine POST-Anfrage an diesen URI gesendet werden sollte. Zum Verschlüsseln von Payloads sollten Sie CGI oder Base64 verwenden.

+0

Danke dafür. Ich wusste nicht über CGI .. – Max