Kodi Community Forum
[request]To add in addons-api a possibility to spoof HTTP headers (user-agent,...) - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Support (https://forum.kodi.tv/forumdisplay.php?fid=33)
+--- Forum: Add-on Support (https://forum.kodi.tv/forumdisplay.php?fid=27)
+--- Thread: [request]To add in addons-api a possibility to spoof HTTP headers (user-agent,...) (/showthread.php?tid=77500)

Pages: 1 2


[request]To add in addons-api a possibility to spoof HTTP headers (user-agent,...) - Goga777 - 2010-07-20

For better work with Internet streams please add in addons-api the posibility to change (spoof) http-headers for internal player of xbmc. I mean the following

- the possibility to change (to spoof) the existing User-Agent - "XBMC/PRE-10.5 r31655 (Linux; openSUSE 11.3 (i586); 2.6.34-12-desktop i686; http://www.xbmc.org)" to another
With it some servers report to xbmc as "HTTP/1.1 403 Bite my shiny metal ass!"

- to handle the cookes
- to handle the Rederer

You can have a look on existing situation when the Internet server refused to the connection with xbmx - HTTP/1.1 403 Bite my shiny metal ass!
Image


- jmarshall - 2010-07-20

You can, yes. Use a pipe: |User-Agent=foo


- Goga777 - 2010-07-20

do you mean something like this (as spiff wrote several months ago)

Code:
http://www.some.where/foo?bar=1|User-Agent=some-app+v1+(Linux%3bandsoon)



- jmarshall - 2010-07-20

Yes.


- Goga777 - 2010-07-20

ok - we will try it. But what about of another http headers - referer, accept-encoding, ...
How to spoof the http headers as for true Internet browser ??

Does it possible to implement such features more elegant way as the following variants

Code:
xbmc.Player().add_http_header('User-Agent', 'Opera/9.80 (X11; Linux i686; U; ru) Presto/2.6.30 Version/10.70')
xbmc.Player().add_http_header('Host', new_host)
xbmc.Player().add_http_header('Accept', 'text/html, application/xml, application/xhtml+xml, */*')
xbmc.Player().add_http_header('Accept-Language', 'ru,en;q=0.9')
xbmc.Player().add_http_header('Accept-Charset', 'iso-8859-1, utf-8, utf-16, *;q=0.1')
xbmc.Player().add_http_header('Accept-Encoding', 'deflate, gzip, x-gzip, identity, *;q=0')
xbmc.Player().add_http_header('Referer', 'http://turbofilm.tv/media/swf/Player14.swf')
xbmc.Player().add_http_header('Connection', 'Keep-Alive'
xbmc.Player().play(url, item)

or

Code:
headers = {'User-Agent': 'Opera/9.80 (X11; Linux i686; U; ru) Presto/2.6.30 Version/10.70',\
'Host': 'cdn.turbofilm.tv',\
'Accept': 'text/html, application/xml, application/xhtml+xml, */*',\
'Accept-Language': 'ru,en;q=0.9',\
'Accept-Charset': 'iso-8859-1, utf-8, utf-16, *;q=0.1',\
'Accept-Encoding': 'deflate, gzip, x-gzip, identity, *;q=0',\
'Referer': 'http://turbofilm.tv/media/swf/Player14.swf',\
'Cookie': 'IAS_ID='+str(phpsessid)+'; _',\
'Cookie2': '$Version=1',\
'Connection': 'Keep-Alive' }

xbmc.Player().add_http_headers(headers)
xbmc.Player().play(url, item)

or

Code:
conn = httplib.HTTPConnection('cdn.turbofilm.tv', 80, 10)
headers = {'User-Agent': 'Opera/9.80 (X11; Linux i686; U; ru) Presto/2.6.30 Version/10.70',\
'Host': 'cdn.turbofilm.tv',\
'Accept': 'text/html, application/xml, application/xhtml+xml, */*',\
'Accept-Language': 'ru,en;q=0.9',\
'Accept-Charset': 'iso-8859-1, utf-8, utf-16, *;q=0.1',\
'Accept-Encoding': 'deflate, gzip, x-gzip, identity, *;q=0',\
'Referer': 'http://turbofilm.tv/media/swf/Player14.swf',\
'Cookie': 'IAS_ID='+str(phpsessid)+'; _',\
'Cookie2': '$Version=1',\
'Connection': 'Keep-Alive' }

conn.request("GET", path, '', headers)
xbmc.Player().play(conn.getresponse(), item)


this is really actual issue for Internet streams and xbmc


- Goga777 - 2010-07-20

jmarshall Wrote:You can, yes. Use a pipe: |User-Agent=foo

we tried like this, but without success

xbmc has sent such modified header

Code:
09:19:38 T:3041859440 M:1684439040   DEBUG: CPlayerCoreFactory::GetPlayers([url]http://217.199.218.60/67b8b1c4fedb2e38e2eb26f403b9c2b2642b0a2c/4226/1f4ec3d14de0d8a49a757f36492fc79e/0/760d9ba55e29de987c99ee00916c9c467150ef6e/3938238515b33cd43526f20e90d59d32889cb047/5cb613e3be04fa68c9e787b828ba98e2d07e7cb4|Referer=http%3A%2F%2Fturbofilm.tv%2Fmedia%2Fswf%2FPlayer14.swf|User-Agent=Opera%2F9.80+%28X11%3B+Linux+i686%3B+U%3B+ru%29+Presto%2F2.6.30+Version%2F10.70[/url]

what's wrong ?

Image


- jmarshall - 2010-07-20

Looks like you've set referer using |Referer="foo" and then tacked another pipe on with the User-Agent. The pipe indicates the beginning of protocol options. Each protocol option is separated with an &.

http://some.url/foo?bar=1|Referer=ass&User-Agent=bender

Cheers,
Jonathan


- spiff - 2010-07-20

not quite correct. the stuff after | needs to be url-encoded.


- seppius - 2010-07-21

Ok. Since HTTP headers and everything is fine.
Now you have to disable the request HEAD. We must immediately make a GET / ...
How?
Image


- Goga777 - 2010-07-21

why need for xbmc HEAD methos at all ?
seems to me it's absolutely useless for xbmc

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

Quote:9.4 HEAD

The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification.

The response to a HEAD request MAY be cacheable in the sense that the information contained in the response MAY be used to update a previously cached entity from that resource. If the new field values indicate that the cached entity differs from the current entity (as would be indicated by a change in Content-Length, Content-MD5, ETag or Last-Modified), then the cache MUST treat the cache entry as stale.



- Goga777 - 2010-07-22

need to create the ticket for fixing such thing ?


- seppius - 2010-09-03

How to add User-Agent when playing music streams (http, mms, etc...)?
I tried this:
Code:
item.setInfo(type='music',infoLabels={'title':name,'artist': '101.RU'})
uri = sys.argv[0] + '?mode=Watch'
uri += '&name=' + urllib.quote_plus(name)
uri += '&url=' + urllib.quote_plus(wma_purl+'|Referer=http://101.ru/101player/uppod7.swf')
xbmcplugin.addDirectoryItem(handle, uri, item)
***
def Watch(url, name):
    xbmc.output('Watch(%s, %s)'%(url, name))
    xbmc.Player().play(url)
Code:
xbmc.log
17:50:07 T:2872048496 M:1842667520  NOTICE: Watch(mms://eu1.101.ru/c4_1_128?st=|Referer=http://101.ru/101player/uppod7.swf, КлассикаЖанра)
17:50:07 T:3025221488 M:1842032640  NOTICE: DVDPlayer: Opening: mms://eu1.101.ru/c4_1_128?st=|Referer=http://101.ru/101player/uppod7.swf
17:50:07 T:3025221488 M:1842032640 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
17:50:07 T:2824690544 M:1842032640  NOTICE: Creating InputStream

Headers:
Code:
GET /c4_4_128?st=[b]|Referer=http://101.ru/101player/uppod7.swf[/b] HTTP/1.0
Accept: */*
User-Agent: NSPlayer/4.1.0.3856
Host: eu1.101.ru:80
Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=0:0,request-context=1,max-duration=0
Pragma: xClientGUID={c77e7400-738a-11d2-9add-0020af0a3278}
Connection: Close
Referer should become one of the Headers, but he hit the GET
How do I fix?
PS: When playing video okay


- johoja - 2010-09-21

seppius Wrote:How to add User-Agent when playing music streams (http, mms, etc...)?
I tried this:
Code:
item.setInfo(type='music',infoLabels={'title':name,'artist': '101.RU'})
uri = sys.argv[0] + '?mode=Watch'
uri += '&name=' + urllib.quote_plus(name)
uri += '&url=' + urllib.quote_plus(wma_purl+'|Referer=http://101.ru/101player/uppod7.swf')
xbmcplugin.addDirectoryItem(handle, uri, item)
***
def Watch(url, name):
    xbmc.output('Watch(%s, %s)'%(url, name))
    xbmc.Player().play(url)
Code:
xbmc.log
17:50:07 T:2872048496 M:1842667520  NOTICE: Watch(mms://eu1.101.ru/c4_1_128?st=|Referer=http://101.ru/101player/uppod7.swf, КлассикаЖанра)
17:50:07 T:3025221488 M:1842032640  NOTICE: DVDPlayer: Opening: mms://eu1.101.ru/c4_1_128?st=|Referer=http://101.ru/101player/uppod7.swf
17:50:07 T:3025221488 M:1842032640 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
17:50:07 T:2824690544 M:1842032640  NOTICE: Creating InputStream

Headers:
Code:
GET /c4_4_128?st=[b]|Referer=http://101.ru/101player/uppod7.swf[/b] HTTP/1.0
Accept: */*
User-Agent: NSPlayer/4.1.0.3856
Host: eu1.101.ru:80
Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=0:0,request-context=1,max-duration=0
Pragma: xClientGUID={c77e7400-738a-11d2-9add-0020af0a3278}
Connection: Close
Referer should become one of the Headers, but he hit the GET
How do I fix?
PS: When playing video okay


Yup I'm getting the same exact problem, anyone else seeing this or know how to fix it ?


- seppius - 2010-09-23

I have not found a solution. It looks like the developers do not care about us.


- Goga777 - 2010-09-23

or may be they are busy with future Dharma release Smile