
Pythonã§Androidã¢ããªäœæããŠã¿ã #6 kivy UrlRequestã§ãã¡ã€ã«ã¢ããããŒãããã
ããã«ã¡ã¯Rcatã§ãã
ååã¯ã¢ããªãšãµãŒããŒã§ã®ããŒã¿ããåãã®éšåãæ€èš/æ§ç¯ããŸããã
ããããPCã§ã¯äžæãè¡ã£ããã®ã®Androidã§ã¯å³èœã¡ããåé¡ãçºçããŠããŸããŸããã
ãšããããšã§ä»åã¯ãã®èŸºè§£æ±ºã§ããã®ãã©ãã詊ããŠãããŸãã
æ¬ã·ãªãŒãºã¯ãã¡ã
æªããã1 threading
ãŸãã¯æ¢åã®ç¥èã§æªãããããŠããŸããã
æžããªããŠããããããªããšã§ããã詊ããããšã¯æžãããã®ã§æžããŸãã
é©åœã«èª¿ã¹ããšãããrequestsãå¿çåŸ
ã¡ã®éã€ãã³ããæ¢ãŸãã®ããã¡ããã?
ãšããããã§threadingã§ã¢ããããŒã颿°åãã°ããã®ã§ã¯ãšèãã
ãœãŒã¹ã¯ä»¥äžã®éã
def BackUpButton_Click(self):
"ããã¯ã¢ãããã¿ã³æŒäžæã®ã€ãã³ã"
if self.ids.Profiles.text in Config.Config["profiles"]:
th = threading.Thread(target=self.BackUP_Requests)
th.start()
#-------------------------------------------------------------------------------------------
def BackUP_Requests(self):
if self.ids.Profiles.text in Config.Config["profiles"]:
p = Config.Config["profiles"][self.ids.Profiles.text]
l = [f for f in glob.glob(os.path.join(p["dirs"][0],"**/*.*"),recursive=True) if os.
for i in l:
files = {'Upload': open(i, 'rb')}
data = {'fdir': os.path.relpath(os.path.dirname(i),os.path.dirname(p["dirs"][0]))}
response = requests.post('http://192.168.0.199:27510/backup_uploadvgi', files=files, data=data)çµæâŠ
äœãèµ·ãããŸããã§ããã
ã©ãã«ã«ããªã³ãããŠåŠçãèŠãŠã¿ããšãã¯ãpostã®è¡ããå
ã«é²ã¿ãŸããã
ã¢ããªãèœã¡ãªãã®ã¯ãã¹ã¬ãããèœã¡ãã ããªã®ã§ã¢ããªãèœã¡ãããã§ã¯ãªããªã£ãã ãã®ããã§ãâŠã
ã¡ãªã¿ã«ãã®åŸãéåæã®ãªã¯ãšã¹ããªã©è©ŠããŸããããå
šãŠãã¡ã
ãã®ãŸãŸçŽ1æ¥ãéããŠè¡ã£ãã®ã§ããã
UrlRequest (kivy.network.urlrequest.UrlRequest) ã䜿ã
UrlRequestãšã¯
è²ã
調ã¹ããã§ãããã©ãããkivyå°çšã®requestã©ã€ãã©ãªãçšæãããŠããããã§ããããããã©ã€ãã©ãªãçšæããããããæšæºã©ã€ãã©ãªããã®ä»ã®ã©ã€ãã©ãªãšçžåœçžæ§ãæªãã®ã§ããâŠã
ããã§ãªãã¡ã¬ã³ã¹ãèŠãŠã¿ãã®ã§ãããã¡ãã£ãšéœåãæªãæãã§ãã
äžèšãèŠãŠããããšãããªã¯ãšã¹ãã¯å¯èœãªã®ã§ãããrequestsã©ã€ãã©ãªã§ã¯ååšãããã¡ã€ã«ãéä¿¡ããåŒæ°ããããŸããã
ããŠããã¡ã€ã«ã¯éä¿¡ã§ããã®ã§ããããïŒ
#å
¬åŒãªãã¡ã¬ã³ã¹ããæç²
from kivy.network.urlrequest import UrlRequest
req = UrlRequest(url, on_success, on_redirect, on_failure, on_error,
on_progress, req_body, req_headers, chunk_size,
timeout, method, decode, debug, file_path, ca_file,
verify)
#https://kivy.org/doc/stable/api-kivy.network.urlrequest.htmlãªãã¡ã¬ã³ã¹ãã颿°ã®å®çŸ©ã確èªãããšãããããããã£ãæå®ããããšãã§ãããããªã®ã§ããã®èŸºã®ä»çµã¿ãæ·±æãããŠçŽæ¥ãã¡ã€ã«ãã¢ã¿ããã§ããã°ãŸã åžæã¯ããã®ã§ã¯ãšèããŸããã
ããããŒãããã£ãšã¯POSTã§ããŒã¿ãã¢ããããŒãããæã®ããŒã¿æ¬äœã®ããšã§ãã
ãªã¯ãšã¹ãããããŒããªã¯ãšã¹ãããã£ã«ã€ããŠèª¿ã¹ã
調ã¹ããšèšã£ãŠããããããçŸç¶ã©ãããããšãããŠããã®ããããããªããšäœã調ã¹ãŠããã®ãããããªãã®ã§ããŸãã¯requestsã©ã€ãã©ãªãã©ããã£ãããããšããã£ã䜿çšããŠããã®ãèŠãŠã¿ãŸããã
äžèšã®ããã«äžåºŠæåã§ãã¹ããè¡ã£ãåŸãè¿ã£ãŠããå¿çãªããžã§ã¯ãã®äžãããªã¯ãšã¹ãã«äœ¿çšããããŒã¿ãèŠãããšãã§ããŸãã
>>> response = requests.post('http://192.168.0.199:27510/backup_uploadcgi', files=files, data=data)
>>> response.request.headers
{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive',
'Content-Length': '92349', 'Content-Type': 'multipart/form-data; boundary=80d7aa3d4743f0990cf97ac287e47604'}
>>> response.request.body
b'--80d7aa3d4743f0990cf97ac287e47604\r\nContent-Disposition: form-data; name="dfir"\r\n\r\ntest/test\r\n--80d7aa3d4743f0990cf97ac287e47604\r\n
Content-Disposition: form-data; name="upload"; filename="m28409472219_2.jpg"\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00...
...äžç¥...
7f\xff\xd9\r\n--80d7aa3d4743f0990cf97ac287e47604--\r\n'
ãã®äžã§æ³šç®ãã¹ããšããã¯2ç¹ã§ãã
ãŸãã¯Content-Typeã§ããããã¯æçš¿ãããããŒã¿ãã©ããããã®ãªã®ãã衚ããã®ã§ãç§ãçŽæ¥ã¯è§Šã£ãããšã¯ãããŸãããããã€ãçš®é¡ãããããšã¯ç¥ã£ãŠããŸããããã®ãããããã®çš®é¡ãäœãªã®ãããŸãå€å¥ãããå¿
èŠããããŸãã
ä»åã¯multipart/form-dataã®ããã§ããããã¯å
¥åçšã®ããã¹ãããã¯ã¹ããã§ãã¯ãããã¯ã¹ãªã©ãå«ã¿ãããã«ãã¡ã€ã«ã®ã¢ããããŒããŸã§ä»ããè€æ°èŠçŽ ã®ãã©ãŒã éä¿¡ã§äœ¿ããããã®ã§ããã
確ãã«ãç§ã¯ãã¡ã€ã«ã®ã¢ããããŒããšããããã£ã®ã¢ããããŒããè¡ã£ãŠããã®ã§ããã®åœ¢åŒã䜿ãã®ã¯æ£ããã§ãããã
ãããŠããã£ã®æ¹ãèŠãŠã¿ãŸãããã
ã©ãããäžèº«ã«ã€ããŠã¯ããããçš®é¡ã®æå®ãããããã§ã¯ãªãããã§ãã
ãšããããéä¿¡ããèŠçŽ ãããŠã³ããªãŒæååã§ã¹ããªããããŠããæãã§ããããã
UrlRequestã䜿ã£ãŠã¿ã
ãšããããå
¬åŒã®äŸãèŠãŠã¿ãŸãããã
ãããç§ã®äœ¿ããããã®ãšã¡ãã£ãšéãæãã§ããã
ã³ã³ãã³ãã¿ã€ãã"application/x-www-form-urlencoded"ãšããããŸãèŠãããšãªããã®ã«ãªã£ãŠãŸãããšããããã§ããã¯äœãªã®ãå士ã«èããŠã¿ããšããŸãããã
import urllib
def bug_posted(req, result):
print('Our bug is posted!')
print(result)
params = urllib.urlencode({'@number': 12524, '@type': 'issue',
'@action': 'show'})
headers = {'Content-type': 'application/x-www-form-urlencoded',
'Accept': 'text/plain'}
req = UrlRequest('bugs.python.org', on_success=bug_posted, req_body=params,
req_headers=headers)
#å
¬åŒãµã€ãããæç²
#https://kivy.org/doc/stable/api-kivy.network.urlrequest.htmlãšããããã§èããŠã¿ãŸããããªããGETã¿ãããªæãã§ããã

ä»å䜿ãããmultipart/form-dataãšã®å·®ãèããŠã¿ãŸããã
ãªãã»ã©ããã€ããªã䜿ãå Žåã«ã¯ç¢ºå®ã«ãã£ã¡ã䜿ããã§ããã
確ãã«äžåŽã®æ¹ãããã¹ãããã¯ã¹ãªã©ã®äžèº«ãéãåã«ã¯è»œéã§é©ããŠãããããããŸãããã䜿ãåããã®ãããã©ãããã§ãããåºæ¬çã«ã¯ãã¡ãã§è¯ãããã§ããã

ãªã¯ãšã¹ãããããŒãšããã£ãçæãã
ããŠãäŸé¡ã§ã¯ä»åããããããšãšéãããšãããŠããŸãããèŠã¯èªåã§ããããŒãããã£ãçæããŠããã«ãã£ã€ããã°ããããã§ããã
次ã®åé¡ã¯ãã©ããã£ãŠçæããã°ããããšãããšããã§ãããä»ãŸã§äœ¿ã£ãŠããrequestsã©ã€ãã©ãªãŒããããŸãæãåºããªããèŠãŠããŸããã
çµæããªã¯ãšã¹ããå®äºããããã°ãããããŒãããã£ããªããžã§ã¯ããšããŠåç
§ã§ããã®ã§ããããããããªã¯ãšã¹ããæåããŠããã°ãããªããšããã«æžãã§ããããã§âŠã
ãšããããã§ã©ã€ãã©ãªã®äžèº«ãèŠãŠãã©ã®éšåã§ãããçæããŠããã®ã確èªããŠãããŸãã
requests.post颿°ããäžèº«ãé ã
ã«è¿œã£ãŠè¡ã£ããšãããæ¬¡ã®ãããªäºå®ã倿ããŸããã
æ°éå±€å
ã«é²ãã ãšããã§ãããããŒãæºåããæ®µéãçºèŠããŸããã
ãã®é¢æ°ã®ååãã£ãŠãããšããã®ãŸãŸã§ããã
ãã®é¢æ°ã«è³ããŸã§ãã¡ã€ã«ãããŒã¿ã¯ç¹ã«ç·šéãããŠããŸããã

ãã®é¢æ°ã«å¯ŸããŠURLãå¿
é åŒæ°ã§æ®ããä»»æã®åŒæ°ã§ããã
ãšããããã§ãURLã¯ããŒã«ã«ãã¹ãã«ä»®çœ®ãããŠããã¡ã€ã«ãšããŒã¿ã®åŒæ°ãæž¡ããŠèå¿ã®ããŒã¿ãçæããŠã¿ãŸãã
>>> f=open("m28409472219_5.jpg","rb")
>>> file={"Upload":f}
>>> data={"fdir":"test/test2"}
>>> rp=requests.models.PreparedRequest()
>>> p=rp.prepare(url="http://localhost",files=file,data=data)
>>> rp.headers
{'Content-Length': '70360', 'Content-Type': 'multipart/form-data; boundary=adfb020375c65aabc37758fd26b640c7'}
>>> rp.body
b'--adfb020375c65aabc37758fd26b640c7\r\nContent-Disposition: form-data; name="fdir"\r\n\r\ntest/test2\r\n--adfb020375c65aabc37758fd26b640c7\r\nContent-Disposition: form-data; name="Upload"; filename="m28409472219_5.jpg"\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\
äžç¥
\xf2\xd5\x9e_\xff\xd9\r\n--adfb020375c65aabc37758fd26b640c7--\r\n'äºæ³éããªã¯ãšã¹ãåŸã«çæã§ãããã®ãšåãããŒã¿ãçæããããšã«æåããŸããã
ãããå
ã«ã¢ããããŒãçšã®ãªã¯ãšã¹ããå®è£
ããŠãããŸãããã

å®è£ ãã
æçµã³ãŒãã®äœæ
ããŠããããŸã§ãã£ãšæ¥ãŠãŸãããŸããã
çŸç¶ã®æçµçãªå®è£
ã¯äžèšã®éãã§ãã
foræã®äžã§ãã¡ã€ã«ãäžã€äžã€ã¢ããããŒãããŠãããŸãã
ãã¡ã€ã«ãéããšããã¡ã€ã«ãªããžã§ã¯ããšããŒã¿ãªããžã§ã¯ãã®çæãè¡ããå
ã»ã©ç޹ä»ãããã¯ããã¯ã§ãªã¯ãšã¹ãããããŒãšããã£ãçæããŸãã
æåŸã«UrlRequestã©ã€ãã©ãªã䜿çšããŠããã®åŒæ°ã«ããã£ãšããããŒãæž¡ããŠå®è¡ããŸãã

å®è¡çµæ
ãã¡ã€ã«ã®ã¢ããããŒãã«æåããŸããã
ãã ãåæãããããªã®ãè¶
é
ãã§ãã
å°ãªããšãrequestsãªãç®ã«è¿œããªãé床ã§ãã°ãæµããã¯ããªã®ã§ããããã¡ã1ç§ã«1ãã¡ã€ã«ãããã®ã¹ããŒãã§ãã°ãæµããŠãããŸãâŠé
âŠã
äœã¯ãšãããkivy.network.urlrequest.UrlRequestã䜿çšãããã¡ã€ã«ã®ã¢ããããŒãã¯æåãããããšãã§ããŸããã
远èš:#12ã«ãŠé«éåããŸãã

ã©ããããé ããã¯ä»¥äžã®åç»ãã芧ãã ãã(æ®åœ±ã¯#7ã§è¡ããŸãã)
ã¹ããã§èµ·åãã
ããããæ¬çªã®ã¹ããã§ã®ã¢ããããŒãã詊ããŠã¿ãŸãã
ã§ã¯æ©éãã!ããªãŒãºããŸããâ
âŠ

ãã®åŸå°ãä¿®æ£ããŠç¢ºèªããŠã¿ãŸãããããªã¯ãšã¹ããæããæç¹ã§æ¢ãŸã£ãŠãã£ãœãã§ãã
äœãšèšããããããŸã§æ¥ããškivyäºã
ã§ã¯ãªããŠãã¹ãããšã¢ããªã®ãããã¯ãŒã¯éã®åé¡ãªæ°ãããŠããŸããâŠããšã¯èšã£ããã®ã®ãæ®éã¢ããªã£ãŠéä¿¡ã£ãŠããæš©éã¯ãªãã¯ããªãã§ãããâŠããããšãäœãèŠèœãšããŠãïŒ
å®ã¯ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ã«æš©éãå¿ èŠãªä»¶
ããããæããªããšæãã€ã€ãé©åœã«ããããµãŒãã£ã³ãã€ã€èŠæãªè±èªã®ãµã€ããã¡ãããšèŠãªããå·¡ã£ãŠãããšãã"android.permissions = INTERNET"ãšãã衚èšãèŠã€ããŸãããããã¯ã€ãŸãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ã«ã¯æš©éããããšããããšã§ããã
ã©ããªã¢ããªã§ãããåœç¶ã®ããã«éä¿¡ããŠããã®ã§ãåœããåããšæã£ãŠããã§ãããããã§ã¯ãªããã§ããã
ãã¡ã€ã«æ€çŽ¢ãšæš©éã®ä»¶ã§åç
§ããæš©éäžèЧã確èªãããšãããŸããã
ãšããããã§ããã¡ãããã«ããŒã¶ãŒã®ãã¡ã€ã«ã«è¿œèšããŸãã

android.permissions = android.permission.MANAGE_EXTERNAL_STORAGE, android.permission.MANAGE_MEDIA, android.permission.READ_EXTERNAL_STORAGE, android.permission.WRITE_EXTERNAL_STORAGE,android.permission.INTERNETãã£ãšã¢ããããŒã
ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ã®æš©éã远å åŸãå床ã€ã³ã¹ããŒã«âŠã
ãã¿ã³ãæŒããšã¢ããããŒãã«æåããŸããããµãŒããŒåŽã«ã¢ã¯ã»ã¹ãã°ãæµããŠãããŸãã

ã¢ããããŒããããããŒã¿ããã®éããã¡ããšå£ããããšãªãã¢ããããŒãã§ããŠããããã§ãã
é·ãã£ãâŠæ¬åœã«é·ãã£ãã
ãããã¢ããããŒã1æ¬ããã ãã§2æ¥ããã£ãŠâŠ

ãŸãšã
ä»åã¯ãã¡ã€ã«ã®ã¢ããããŒãã ãã§1æ¬çµãã£ãŠããŸããŸããã
kivyã¯æ
å ±ãå°ãªããšã¯èããŠããŸãããããŸãããã¡ã€ã«ãã¢ããããŒãããŠããæ
å ±ãäžã€ãåºãŠããªããšã¯æããŸããã§ããã
ããã«è¿œãèšã¡ããããããã«ããµããŒããããã©ã€ãã©ãªã𿮿®µäœ¿ãã®ãªã¯ãšã¹ãã䜿ãåæãå
šç¶éãéåžžã«å€§å€ã§ããã
ããããåç©«ãšããŠãã¹ãã®ä»çµã¿ãããæ·±ãçè§£ããããšãã§ããã®ããšæããŸãããããããã£ãŠããã°ãããããäœæ°Žæºã®ã©ã€ãã©ãªãã䜿ããªãç°å¢ã§ããã¡ã€ã«ã®ã¢ããããŒããªã©ãã§ãããã§ããã
次åã¯ãã®èŸºã®æ©èœãæ·±æãã§ãã¡ã€ã«ã®å·®åãèŠãŠã¢ããããŒãã§ããããã«ããŠããããšæããŸãããŸãããã¡ã€ã«ã®æŽæ°æ¥æã®å€æŽãªã©ãè¡ãããã¡ã€ã«ã®æç¡ã ãã§ãªããæŽæ°ã®æç¡ã§ãå·®åãå€å¥ã§ããããã«ããŸãã
æåŸã«ãæš©éãªãã£ããããrequestsã©ã€ãã©ãªãèœã¡ãŠãããããªãããšæããªãããªãâŠããã®ãã¡è©Šããããããªãã
ãšããããæ¬ã·ãªãŒãºäžæ¢ã¯å ããã®ã§ãããã§ã¯ãŸããäŒãããŸãããã