Re: Very long URL returning CURLE_URL_MALFORMAT
Date: Fri, 6 Mar 2020 20:40:33 -0500
On Fri, Mar 6, 2020 at 6:08 PM Robert Brose via curl-library
<curl-library_at_cool.haxx.se> wrote:
>
> I'm having trouble figuring out what I'm doing wrong with an
> implementation of libcurl that is working for everything else I can
> throw at it. I've done a lot of searching stack overflow, etc and
> haven't figured out the issue yet.
> Using the latest libcurl I'm getting the above error back immediately
> with no data sent. It looks fine as far as I can tell and if I put the
> same URL into command line curl it works fine.
>
> https://r3---sn-vgqs7nlk.googlevideo.com/videoplayback?expire=1583550131&ei=U7piXujKIseCir4PhKec-Aw&ip=1.1.1.1&id=o-AHAFYbXI8YRoD0acpA-MVWR0l6dylcQoX4c-r7Jx4vMg&itag=248&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278&source=youtube&requiressl=yes&mm=31%2C26&mn=sn-vgqs7nlk%2Csn-qxoedn7d&ms=au%2Conr&mv=m&mvi=2&pl=20&initcwndbps=805000&vprv=1&mime=video%2Fwebm&gir=yes&clen=84511680&dur=357.123&lmt=1583350521559494&mt=1583528433&fvip=3&keepalive=yes&fexp=23842630&c=WEB&txp=5431432&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=ADKhkGMwRQIgCzr9srMO-3hlIOxxHI3EhMcB63reuEgfYcupN8315joCIQC315T8NyWNZv0oTedYBMepYi3ParbWUYp1Rgv_trMAsA%3D%3D&lsparams=mm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=ABSNjpQwRQIhAKo-wN50dUGo82aZ83P1PeleKiM_Whxp4HGrSd5w37hWAiAhVmYKbyqzmUGspMejmVGLWwbet8j3Z2nv8shJ3bF4Gg%3D%3D&ratebypass=yes
>
> It's a GET so I'm just using this to set it up:
>
> curl_easy_setopt(m_cURLFile->handle.curl, CURLOPT_URL,
> JRStringUTF8(m_fnURL.GetFilename()).GetString());
>
> The JRStringUTF8(m_fnURL.GetFilename()).GetString() returns a pointer to
> the null terminated c string exactly as seen above.
> All of the rest of the curl setup is precisely how I'm doing it for
> every other GET request.
>
> I run it through URL validators and it's fine.
> Is there some sort of maximum URL length?
If curl is not making a copy of JRStringUTF8, then the string could be
going away before the command completes.
Maybe you can add a first class temporary object that holds the
string. Then use it like:
char* temp = new char [...];
copy_string(temp, ...); // copy JRStringUTF8
curl_easy_setopt(m_cURLFile->handle.curl, CURLOPT_URL, temp);
delete[] temp;
The code above tries to rule out early destruction of the string, but
it is just a guess. It would probably be helpful if you could provide
more context. Is the code available on GitHub?
Jeff
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2020-03-07