Wpis z mikrobloga

#python #kivy
Próbuję w kivy wyświetlić obrazek z url, ale problem polega na tym, że loader zwraca error 403 forbidden.
Muszę jakoś do requesta w headerach dodać user-agent to wtedy przepuści, tylko problem w tym, że nie wiem gdzie ( ͡° ʖ̯ ͡°)
Przejrzałem klasy obrazka i loadera, no ale nie znalazłem miejsca, w którym mógłbym coś zdziałać.
Ktoś mądrzejszy może podzieliłby się pomysłem co zrobić? ʕʔ
  • 6
  • Odpowiedz
@KsaneK:

import requests
header = {'user-agent': '# Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1',}
url = '[http://www.w3.org/'](http://www.w3.org/')
r = requests.get(url, headers=header)
print(r.headers)
print(r.request.headers)

A co ma kivy do tego?
  • Odpowiedz
via Android
  • 0
@piotrb a to, że kivy ma własny loader obrazków i jedyny parametr jaki mogę podać to source.
Już sobie poradziłem z tym, wiem że to głupi pomysł, ale zedytowałem pliki źródłowe kivy.
Na nic innego nie wpadłem ( ͡° ͜ʖ ͡°)
  • Odpowiedz
via Android
  • 0
@piotrb tylko, że ja używam klasy AsyncImage i ona nie przyjmuje parametru headers. Poza tym Image przyjmuje tylko nazwę pliku jako stringa, więc nawet gdybym samemu odczytał obrazek z url to nie da rady bezpośrednio go przekazać do klasy Image/AsyncImage. Jedyna opcja to zapisać go na dysku i wtedy podać ścieżkę, ale obrazki co chwilę dochodzą nowe i chyba nie ma to sensu.
  • Odpowiedz
@piotrb: A tak wygląda kod odpowiadający za zapytanie w kivy.loader:

if proto == 'smb':
# read from samba shares
fd = urllib_request.build_opener(SMBHandler).open(filename)
else:
# read from internet
fd = urllib_request.urlopen(filename)

Po prostu to zedytowałem i działa jak trzeba ( ͡ ͜ʖ ͡)
  • Odpowiedz
@KsaneK: > Po prostu to zedytowałem i działa jak trzeba

Raczej wyciągnij fragment kodu do siebie, nie będziesz się bał przy aktualizacji. Z tego co zerknąłem oni tam np. korzystają z cache więc warto byłoby korzystać z ich mechanizmów wzbogaconych o headery. Ja w takich przypadkach pisałem zawsze do Autorów, w przypadku OS fix był zawsze już następnego dnia, rekord to koleś od proxy do irca z FreeBSD: w ciągu 1,5
  • Odpowiedz