POST calls naar Flickr API

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erwin H

Erwin H

10/08/2014 12:13:03
Quote Anchor link
Ik ben benieuwd of er iemand is met persoonlijke ervaring in het maken van POST calls naar de Flickr API. Op zich krijg ik elke call wel aan de praat (GET of POST), alleen zit ik met een heel specifiek probleem, waar ook de Flickr API handleiding geen antwoord op heeft.

Het probleem doet zich voor als ik een POST call maak waarin in een waarde zit die normaal gesproken urlencoded moet worden. Bijvoorbeeld als ik een nieuw comment bij een foto wil geven met als waarde 'Test comment'. Vanwege de spatie zou dit in een GET request moeten worden gecodeerd, maar in een POST request is dat onduidelijk. Het lijkt erop dat dit wel in de basestring voor de signature moet worden opgenomen en daarin moet wordt gecodeerd. Maar hoe ik het ook doe, de signature klopt telkens niet. Als ik dan de debug basestring bekijk die Flickr terugstuurt dan blijk dat daarin de waarde telkens een keer meer gecodeerd is dan wat ik zelf heb. Dus als het bij mij 'test%2520comment' wordt, dan staat er in de basestring van Flickr 'test%252520comment'.

Dus als er iemand ervaring heeft met dit specifieke punt dan hoor ik het erg graag. Moeten POST parameters bijvoorbeeld in de basestring opgenomen worden, moeten die waardes worden gecodeerd, hoe vaak, etc.

Toevoeging op 11/08/2014 10:07:36:

Nog even een test gedaan met GET requests vs POST requests. Als ik in een GET request de datum 'August 1, 2014' meegeef dan kan ik mijn eigen debug log zien dat er in de basestring het volgende staat:
August%201%2C%202014

Die call werd geaccepteerd en uitgevoerd door Flickr, dus die basestring klopte.

Als ik nu dezelfde waarde in een POST call meegeef (met alle parameters gecodeerd), dan staat er in mijn basestring dezelfde waarde, in de debug basestring die ik terug krijg van Flickr staat er echter een andere.
mijn basestring: August%201%2C%202014
Flickr debug basestring: August%2525201%25252C%2525202014

Waarom klopt het dus wel in een GET request en niet in een POST request? Iemand enig idee?
 
PHP hulp

PHP hulp

27/04/2024 05:40:22
 
Ward van der Put
Moderator

Ward van der Put

11/08/2014 11:43:39
Quote Anchor link
Het resultaat van urlencode('August%201%2C%202014') met jouw basestring is de Flickr debug basestring August%25201%252C%25202014, dus dat is gewoon dubbelop met een dubbele encoding.

Wat doet Flickr dan als je helemaal geen URL-encoding toepast op een POST?
 
Erwin H

Erwin H

11/08/2014 12:28:47
Quote Anchor link
Klopt, die dubbele encoding is ook wat mij dus bevreemd.

Inmiddels heb ik een lijst met mogelijkheden voor mezelf gemaakt en ben ik die aan het aflopen. Niet coderen voor POST requests leek namelijk wel te helpen voor de POST request (op zeker moment lukte het namelijk wel), maar kreeg ik bij andere requests weer problemen. Uiteindelijk lijkt het er dus op dat mijn procedure om tot een url te komen (en de parameters in te voegen) gewoon niet klopt. Waar echter precies de fout zit ben ik nog niet achter. Het feit dat er geen duidelijke documentatie is die helder aangeeft wat wel en niet moet gebeuren voor GET en POST requests helpt daarbij natuurlijk ook niet.....

Toevoeging op 11/08/2014 16:48:14:

Het ziet ernaaruit dat ik nu de oplossing heb. Tenzij ik later weer dezelfde type problemen krijg met andere calls...

De fout zat hem eigenlijk in het niet correct coderen van de parameters. Het gaat wat ver om het helemaal uit te leggen, maar door mijn implementatie van de oauth procedure werden sommige parameters niet helemaal correct gecodeerd, wat soms tot dubbele codering leidde. Doordat ik dat nu via trial & error heb omgegooid werken zowel GET requests, als ook de POST requests. Kort gezegd, De GET parameters moeten wel gecodeerd worden, de POST parameters niet. Alle parameters die in de basestring verwerkt worden (voor zowel GET als POST) moeten voor die verwerking specifiek gecodeerd worden en voor de oauth signature parameter geldt weer een iets andere codering, aangezien de oauth specificatie net iets anders is dan de urlencode en rawurlencode van php aanhouden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.