[FFmpeg-trac] #6976(ffmpeg:new): ffmpeg ignores user-agent http header
FFmpeg
trac at avcodec.org
Mon Jan 22 17:06:24 EET 2018
#6976: ffmpeg ignores user-agent http header
--------------------------------+--------------------------------------
Reporter: Moipeg | Type: defect
Status: new | Priority: normal
Component: ffmpeg | Version: git-master
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
--------------------------------+--------------------------------------
Summary of the bug:
How to reproduce: read http stream restricted by user agent
{{{
COMMAND:
% fmpeg -loglevel debug -i http://cdnamd-hls-
globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8
-user_agent 'Safari' -user-agent 'Safari' -headers 'User-Agent: Safari'
-vn -t 60 out.mp3
OUTPUT:
ffmpeg version N-89871-g388a0f7 Copyright (c) 2000-2018 the FFmpeg
developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 20160609
configuration: --prefix=/home/aa --enable-avresample --enable-ffplay
--enable-fontconfig --enable-frei0r --enable-gpl --enable-libass --enable-
libcdio --enable-libfontconfig --enable-libfreetype --enable-libmp3lame
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencv
--enable-libpulse --enable-librtmp --enable-libspeex --enable-libtheora
--enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-
libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-
nonfree --enable-opengl --enable-static --enable-version3 --enable-libssh
--enable-openssl --enable-opencl --enable-libfdk-aac --enable-libbs2b
--enable-libcaca --enable-libfribidi --enable-libgme --enable-libmodplug
--enable-libopenjpeg --enable-libopus --enable-libsoxr --enable-libwavpack
--enable-libwebp --enable-libzmq --enable-libzvbi --enable-openal
--enable-libx265
libavutil 56. 7.100 / 56. 7.100
libavcodec 58. 9.100 / 58. 9.100
libavformat 58. 5.100 / 58. 5.100
libavdevice 58. 0.101 / 58. 0.101
libavfilter 7. 11.101 / 7. 11.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
Splitting the commandline.
Reading option '-i' ... matched as input url with argument 'http://cdnamd-
hls-globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument 'debug'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url http://cdnamd-hls-
globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8.
Successfully parsed a group of options.
Opening an input file: http://cdnamd-hls-
globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8.
[NULL @ 0x3f82840] Opening 'http://cdnamd-hls-
globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8'
for reading
[http @ 0x3f83280] Setting default whitelist
'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
[http @ 0x3f83280] request: GET
/live/ramdisk/radio_idaa_watanya/hls_snrt_radio/radio_idaa_watanya-
video=100000-audio_AACL_qad_130400_110=130400.m3u8 HTTP/1.1
User-Agent: Lavf/58.3.100
Accept: */*
Range: bytes=0-
Connection: close
Host: cdnamd-hls-globecast.akamaized.net
Icy-MetaData: 1
[http @ 0x3f83280] HTTP error 403 Forbidden
http://cdnamd-hls-
globecast.akamaized.net/live/ramdisk/radio_idaa_watanya/hls_snrt_radio
/radio_idaa_watanya-video=100000-audio_AACL_qad_130400_110=130400.m3u8:
Server returned 403 Forbidden (access denied)
ffmpeg version N-89871-g388a0f7
Built on 2018-01-22
As you can see, I used all the three possible ways to pass a user agent
string, and made the string artificially simple to avoid any mishaps.
Using each one of these ways alone yields the same results.
The user-agent in the debug output is always Lavf.
I am useless as a C developer. The only workaround I could figure out is
to hardcode the user-agent value in the file http.c and change line 132
from
#define DEFAULT_USER_AGENT "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION)
to
#define DEFAULT_USER_AGENT "Safari/" AV_STRINGIFY(LIBAVFORMAT_VERSION)
Luckily the server I am connecting to doesn't do any serious sanity checks
on the user agent's name and version.
This worked. But, (i) it's a stupid solution, and (ii) the next git pull
will overwrite the hardcoded user-agent value.
Thank you for addressing this.
}}}
Patches should be submitted to the ffmpeg-devel mailing list and not this
bug tracker.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/6976>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list