Setting server headers for downloads
-
Does the
Server.setHttpHeader()
function apply to downloads as well as GET/POST? -
Bump bump - user token doesn't seem to be sent when downloading files.
-
@d-healey Do you mean the
parameters
object is not sent usingServer.downloadFile(...)
? -
@ustk No I want to know if Server.setHttpHeaders has an effect on Server.downloadFile. My WooCommerce site is set to only allow downloads for logged in users, so I send the token along in a header before starting the download, but it doesn't accept it as the user being logged in so the server throws an error.
-
@d-healey I can't help much. Are you sure you respected the object format for the token you are sending?
-
@d-healey
Shouldn't the token be sent from the download function instead of the header?
Just saying shit, sorry... -
@ustk said in Setting server headers for downloads:
Are you sure you respected the object format for the token you are sending?
Yeah, it works for all my POST and GET requests.
-
@d-healey So the
pendingDownload
doesn't take aextraHeader
parameter like thependingCallback
does...
I don't see how to add this though, because their structures are different... @Christoph-Hart's the guy we need :) -
@ustk Yeah I had a look myself and came to the same conclusion :)
-
@d-healey In fact it seems doable, but then I can't test it as my woo-commerce isn't ready...
Try to add
String extraHeader;
inside the ScriptDownloadObject struct (between line 384-389 in ScriptingApiObjects.h)
and
newDownload->extraHeader = extraHeader;
at line 54 of GlobalServer.cpp
And cross your fingers
-
Thanks, I'll try it now!
@ustk said in Setting server headers for downloads:
I can't test it as my woo-commerce isn't ready...
You should setup a local server for testing using something like XAMPP if you're going to be working with the Server API a lot.
-
@d-healey Yeah thanks, I don't know anything about servers and web stuff, but I take your words for it :)
-
Didn't work unfortunately.
-
@d-healey Oh I think that's because the extraHeader has to be linked to the pendingCallback one, or we need to create a new one somehow. I think we're close ;)
-
@d-healey So I think you we need to create a new method for setting the header specific to downloadObject, so try adding a method like this to the ScriptingApiObjects.h
void setDownloadHttpHeader(String newHeader) { extraHeader = newHeader; }
-
@ustk The download object doesn't exist until after the call to Server.downloadFile. So by then it will be too late to set the header.
-
@d-healey I don't understand why two extraHeader are declared, one in the pendingCallback and one below in private. I imagine the one that is used is the private one. So we shouldn't declared it in the ScriptingApiObject.
This means that just passing it insed the addDownload (newDownload->extraHeader = extraHeader;
) should be enough, just before adding a pending download as it is done for the pendingCallback. -
@d-healey I think it should be passed to these inputStream calls instead of String():
in start
auto wis = downloadURL.createInputStream(false, nullptr, nullptr, String(), HISE_SCRIPT_SERVER_TIMEOUT, nullptr, &status);
and in resume
auto wis = downloadURL.createInputStream(false, nullptr, nullptr, String(), 0, nullptr, &status);
-
@ustk Replacing String() with the token didn't work :(
-
@d-healey I'm definitely out of ideas now