POST calls naar Flickr API
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?
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?
Het Wat doet Flickr dan als je helemaal geen URL-encoding toepast op een POST?
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.