ãªã¯ãšã¹ãã䜿çšããŠdeveloper-api.nest.comã«ã¢ã¯ã»ã¹ãããã¢ã©ãŒããŒã¯ã³ã䜿çšããŠAuthorizationããããŒãèšå®ããŠããŸãã äžéšã®ãªã¯ãšã¹ãã§ã¯ããã®APIã¯307ãªãã€ã¬ã¯ãã§å¿çããŸãã ãã®å Žåã§ããåŸç¶ã®ãªã¯ãšã¹ãã§AuthorizationããããŒãéä¿¡ããå¿
èŠããããŸãã requests.get()
ãšã»ãã·ã§ã³ã䜿ã£ãŠã¿ãŸããã
ãªãã€ã¬ã¯ããèš±å¯ããã307ãæ€åºããŠããèªåã§æ°ãããªã¯ãšã¹ããçºè¡ããããšã§ãããåé¿ã§ãããšæããŸãããããã¯ãã°ãã©ããçåã«æã£ãŠããŸãã ã»ãã·ã§ã³ã®ã³ã³ããã¹ãå ã§è¡ããããã¹ãŠã®ãªã¯ãšã¹ãã§AuthorizationããããŒãéä¿¡ãããããšãæåŸ ããå¿ èŠããããŸããïŒ
In [41]: s = requests.Session()
In [42]: s.headers
Out[42]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0'}
In [43]: s.headers['Authorization'] = "Bearer <snip>"
In [45]: s.get("https://developer-api.nest.com/devices/thermostats/")
Out[45]: <Response [401]>
In [46]: s.get("https://developer-api.nest.com/devices/thermostats/")
Out[46]: <Response [200]>
In [49]: Out[45].history
Out[49]: [<Response [307]>]
In [50]: Out[46].history
Out[50]: []
In [51]: Out[45].request.headers
Out[51]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0'}
In [52]: Out[46].request.headers
Out[52]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0', 'Authorization': 'Bearer <snip>'}
ãªãã€ã¬ã¯ãå ã¯ã©ãã§ããïŒ
ãããå¥ã®ãã¡ã€ã³ã firebase-apiserver03-tah01-iââad01.dapi.production.nest.com
ããã§ããããã¯ããæå³çãªããšã§ããæ°ãããã¹ãã«ãªãã€ã¬ã¯ãããããšãã«ãèªèšŒããããŒãåé€ããããšã«éåžžã«ç©æ¥µçã§ãã ããã¯ããªããã¹ããªãã€ã¬ã¯ãã§ããããŒãæ°žç¶åããããšã«ãã£ãŠåŒãèµ·ããããCVE2014-1829ã«å¯ŸåŠããããã®å®å šæ©èœã§ãã
ãã ããç¹å®ã®èŠ³ç¹ããã¯ããªã¯ãšã¹ãã§ã¯ãªãSession
ã«AuthorizationããããŒãèšå®ããŠãããããããã«ã¯ãŸã ãã°ããããŸãã ååãšããŠããããæå³ããã®ã¯ãããªãã€ã¬ã¯ããã©ãã«è¡ããã¯æ°ã«ããªããããããŒãè¿œå ããããšããããšã§ãã ç§ã¯ãŸã ãã®ã¢ãããŒããæãã§ããŸããããã«ããããã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ãå€å°ããªãããŒã«ãªã£ããšããŠããå°ãªããšãã©ã®ãããªåœ¢ã®æ»æã«ããããããªãããã«ãªããŸãã ããããç§ã¯ããã§ç§ãã¡ãããŸãã«ãåŠæ³çã§ãããšç¢ºä¿¡ããããšãåãå
¥ããŠããŸãã
ããããç§ã¯ããã§ç§ãã¡ãããŸãã«ãåŠæ³çã§ãããšç¢ºä¿¡ããããšãåãå ¥ããŠããŸãã
ç§ã¯ç¢ºä¿¡ããããšã«å¯ŸããŠããŸããªãŒãã³ã§ã¯ãããŸããããè³ãåŸããããšãããšããªãã§ãã
ãšã¯èšããã®ã®ã_allowed_ãã¡ã€ã³éã§ãã®ãããªããããŒãæ°žç¶åããããã«ãå¥ã®Authã¡ã«ããºã ãäœæããããšãã§ããŸãããã®ããã rebuild_auth
äœããã®äœæ¥ãè¡ãå¿
èŠããããŸãã
ç§ã¯ãããä»ã©ã®ããã«æ©èœãããã®å®å šæ§ã«ã€ããŠè°è«ããã€ããã¯ãããŸããã ãã ãããå®å šã§ãªããåäœãéžæããããã®ã¡ã«ããºã ããããšäŸ¿å©ã§ãã ããããããããã®ããããŒãæ°žç¶åããããã®ããŒã¹ãã¡ã€ã³ïŒãã®å Žåã¯nest.comïŒãèšå®ããããããããéä¿¡ããŠããããã¡ã€ã³ã®ãªã¹ããèšå®ããŸãã
ãããããã¯ãªã¯ãšã¹ãã®ã³ã¢ãæäŸãããããã¯ããã«è€éã§ãã ãã®ããããã®çš®ã®å Žåã¯ãå¥ã®Authã¯ã©ã¹/ãã³ãã©ãŒãæé©ã«æ©èœããã®ã§ã¯ãªãããšèããŠããŸãã ç¡æ¡ä»¶ã«prepare_auth
åŒã³åºããªããšç¢ºä¿¡ããŠããã®ã§ãããŸããããšã¯æããŸããã
prepare_auth
ç¡æ¡ä»¶ã«åŒã³åºããªããããæšæºã¢ãã«ã§ã¯æ©èœããŸããã ãã ãããã®APIã®å°ãçãã䜿çšæ³ã§ãã£ãŠãããã©ã³ã¹ããŒãã¢ããã¿ãŒã䜿çšããŠãã®åœ¹å²ãæããããšãã§ããŸãã
TAã¯ããã§æšå¥šããã®ã¯çµ¶å¯Ÿã«ééã£ãŠãããšæããŸãã
session.auth
ãåé€ããå¿
èŠããããŸãã ç¹ã«åœ¹ã«ç«ã¡ãŸãããauthãã»ãã·ã§ã³ã«æäŸãããŠããå Žåãã»ãã·ã§ã³ãè¡ããã¹ãŠã®èŠæ±ã«å¯ŸããŠèªèšŒãéä¿¡ããå¿ èŠããããŸãã
ç§ã¯æ ¹æ¬çã«åæããŸããã ã»ãã·ã§ã³ã¯åäžã®ãã¡ã€ã³ã§ã¯äœ¿çšãããŸããã䜿çšãããŠããã°ãåé¡ã¯ãããŸããã
ãããããsession.authãåé€ããå¿ èŠããããŸãã ç¹ã«åœ¹ã«ç«ã¡ãŸããã
䟿å©ã ãšæããŸãã ãã ããã¿ãã«ã®å²ãåœãŠãèš±å¯ãããŠããªãæ¹ããããšæããŸãã ããããããã䜿çšãããã¡ã€ã³ãæå®ããAuthã¯ã©ã¹ãå¿ èŠã§ãã ãªã¯ãšã¹ãã䜿çšãããšãã«ãã¡ã€ã³ã®èªèšŒæ å ±ãæå®ã§ããrequests- toolbeltããããããšãã§ããŸãã ããã«ãããã»ãã·ã§ã³ããŒã¹ã®èªèšŒãåŠçããããã®ããå°ãå®å šãªæ¹æ³ãæäŸãããŸãã æ¬ ç¹ã¯ããŠãŒã¶ãŒããã®çš®ã®èªèšŒã«ãªããã€ã³ããå¿ èŠãããããšã§ãã
ãŸãããªãã€ã¬ã¯ãã®ããã«ããããŒãæ°žç¶åã§ããããã«ããããä¿®æ£ããå¿ èŠããããŸãã
@jtherrmannãããèªèšŒããããŒã§ããå Žåãåé¡ãåé¿ããæãç°¡åãªæ¹æ³ã¯ãèŠæ±ã«å¿ èŠãªããããŒãåžžã«é 眮ããã»ãã·ã§ã³ã¬ãã«ã®èªèšŒãã³ãã©ãŒãèšå®ããããšã§ãã
ããã«ã€ããŠäœãé²å±ãè¿œå ã®èæ
®ããªãããŠããŸããïŒ
ç§ã¯åãåé¡ã«ã¶ã€ãã£ãŠããŸãã
@ethanroyããªãã®ããäžã®ã³ã¡ã³ãã§ãã»ãã·ã§ã³ã¬ãã«ã®èªèšŒãã³ãã©ãŒã䜿çšãããšããç§ã®ææ¡ä»¥å€ã«è¿œå ã®èæ ®
é¢é£ïŒã»ãã·ã§ã³ãèªèšŒããªãã€ã¬ã¯ãããŠåé€ããå Žåã get
å床åŒã³åºããšãèªèšŒãåé©çšããããã£ãã·ã¥ããããªãã€ã¬ã¯ãã䜿çšãããŸãã ã ãã2åããã¯ãããšããªãã¯å
¥ããŸããæå³ãããè¡åïŒ
>>> s = requests.Session()
>>> s.headers.update({"Authorization": "Token {}".format(API_TOKEN)})
>>> s.get(url)
<Response [403]>
>>> s.get(url)
<Response [200]>
@GregBakkerã¯ããããã§ãã ããã¯æå³ãããè¡åã®åæµç¹ã§ãã ãã ãããã®ãã°ã¯ãå ã®403ãçºçããŠã¯ãªããªãããšã瀺ããŠããŸãã
@Lukasaããåé¡ãåé¿ããæãç°¡åãªæ¹æ³ã¯ãã»ãã·ã§ã³ã¬ãã«ã®èªèšŒãã³ãã©ãŒãèšå®ããããšã§ãããšèšããšããããã¯ä»æ¥æ©èœãããã®ã§ããïŒ ç§ãã³ãŒãã§èŠãŠãããã®ã«åºã¥ããŠãçãã¯ããŒã§ãããããªãã®èšèé£ãã¯ç§ãäœããéããŠãããã©ããçåã«æããŸãã ããªãã¯ã»ãã·ã§ã³èªèšŒå±æ§ãèšå®ããããšã«ã€ããŠè©±ããŠããã®ã§ãããïŒ
ãããããã¯ããŸãããã¯ãã§ãã
@jwineingerã§ã¯ãã©ããã£ãŠãã®åé¡ãåé¿ããã®ã§ããïŒ ããã§ãåãããã«åäœããããã§ãã
Neståºæã®åé¿çã¯2ã€ãããŸãã
1ã€ã¯ãAuthorizationããããŒã䜿çšããã®ã§ã¯ãªããaccess_tokenã§auth
ãã©ã¡ãŒã¿ãŒãæž¡ãããšã§ãã https://gist.github.com/tylerdave/409ffa08e1d47b1a1e23ã§ãããèŠã€ããŸãã
ãã1ã€ã¯ã䜿çšããããããŒãå«ãèŸæžãä¿åãããªãã€ã¬ã¯ãã«åŸããã«ãããããŒãå床枡ã2çªç®ã®èŠæ±ãè¡ãããšã§ãã
headers = {'Authorization': 'Bearer ' + access_token, 'Content-Type': 'application/json'}
initial_response = requests.get('https://developer-api.nest.com', headers=headers, allow_redirects=False)
if initial_response.status_code == 307:
api_response = requests.get(initial_response.headers['Location'], headers=headers, allow_redirects=False)
ç§ã¯ãããšåãåé¡ã«ééããã«ã¹ã¿ã requests.Session
å®è£
ã§rebuild_auth
ã¡ãœããããªãŒããŒã©ã€ãããããšã§åé¿ããŸããã
from requests import Session
class CustomSession(Session):
def rebuild_auth(self, prepared_request, response):
return
s = CustomSession()
s.get(url, auth=("username", "password"))
@ sigmavirus24 @ gabriel-looã®ãœãªã¥ãŒã·ã§ã³ã®äœãåé¡ã«ãªã£ãŠããŸããïŒ ã»ãã¥ãªãã£äžã®æžå¿µïŒ
@ j08lueã¯ãã ã¹ã¬ããããèªã¿ãã ããã æ°ãããã¡ã€ã³ãžã®ä»»æã®ãªãã€ã¬ã¯ãã«åŸãåã«èªèšŒãåé€ããªãããšã«é¢é£ããCVEããããŸãã ãã®ããã«åé¡ã«ã€ããŠèããŠãã ããïŒ
ç§ã¯api.github.com
ãªã¯ãšã¹ããéä¿¡ããŠããŸãããæ»æè
ã管çããŠããanother-domain.com
ãžã®ãªãã€ã¬ã¯ãã远跡ããããªããžããªãžã®æžã蟌ã¿ã¢ã¯ã»ã¹æš©ïŒãªã¯ãšã¹ããå«ãïŒã§ããŒã¯ã³ãæž¡ããŸããå®éã«ã¯APIãä»ããŠã³ããããè¡ã£ãŠããã®ã«ããªã¯ãšã¹ãã«å¯ŸããŠã³ããããè¡ã£ãŠããããã«èŠããå ŽåããããŸãã ãªã¯ãšã¹ãã«ã³ãŒããå«ãããšãã»ãã¥ãªãã£äœå¶ã匱ãŸããç©æ¥µçã«å®³ãåãŒãå¯èœæ§ããããŸãã ããã¯ããªãã€ã¬ã¯ãããšã«èªèšŒè³æ Œæ
å ±ãç¡æ¡ä»¶ã«éä¿¡ããå Žåã«çºçããå¯èœæ§ããããŸãã
ããã§ãããªãã€ã¬ã¯ããæªæã®ãããã®ã§ã¯ãªããšããŸãããããµãŒãã¹ã®è³æ Œæ å ±ãå¥ã®äŒç€ŸããµãŒãã¹ã«æŒãããŠãåé¡ãããŸãããïŒ å ã®ãµãŒãã¹ã¯ãããªããããªãã®é¡§å®¢ããŸãã¯ä»ã®äœãã®ããã«æ©å¯ããŒã¿ãä¿åããå ŽåããããŸãã ãªãã€ã¬ã¯ããããæ°ãããã¡ã€ã³ãè³æ Œæ å ±ã䜿çšãããäºæããªãããŒã¿ãšããŠãã°ã«èšé²ããå¯èœæ§ãããå Žåã§ããããããæ»æããŠãããã®ãã°ãååŸã§ãã人ã¯ãã©ãã«ããºã«ã解ãããšãã§ããã°ãå ã®ãã¡ã€ã³ã«å¯ŸããŠè³æ Œæ å ±ã䜿çšã§ããŸãã圌ãã¯å±ããŠããŸãã ããªãã¯æ¬åœã«ãã®ãªã¹ã¯ãåããŠãæ§ããªããšæã£ãŠããŸããïŒ
ã€ã©ã¹ããããããšãã@ sigmavirus24ã ãã®æžå¿µãæçµçã«æ©å¯ããããŒããªãã€ã¬ã¯ãã«è»¢éããããšãçŠæ¢ããŠããå Žåããªããã®ã¹ã¬ããã¯ãŸã éããŠããã®ã§ããïŒ ç§ã¯ããªããåŸããã®ïŒ403ïŒãããé©åãªãšã©ãŒãèããããšãã§ããªãã£ãã®ã§ãããã§ã¢ã¯ã·ã§ã³ã®ãã°ã®å¿ èŠã¯ãããŸãããïŒ ãããšãã@ LukasaãäœãèããŠããŸãããïŒ
ç§ã¯æè¿ãéå ¬éAPIã䜿çšããŠãããšãã«ãã®åé¡ã«ã¶ã€ãã£ãŠããŸããã ã»ãã¥ãªãã£äžã®æžå¿µã¯ããªãã€ã¬ã¯ãã§èªèšŒãåãé€ãçç±ãšããŠå®å šã«çã«ããªã£ãŠããŸãã @ gabriel-looã®ãããªè§£æ±ºçã¯ãããããã®ã«ååå®å šãªç°å¢ã«ãããšäººã ãä¿¡ããŠããå Žåã«æ€èšã§ãããã®ã ãšæããŸãã ãŸãã¯ãã»ãã·ã§ã³ã¬ãã«ã®ãã³ãã©ãŒã ãŸãã¯ãå¯èœã§ããã°ãäžèšã®ããã«ãªãã€ã¬ã¯ããå®å šã«ã¹ãããããŠåé¿ããå¥ã®æ¹æ³ãèŠã€ããŠãã ããã ãããã£ãŠããã®èŠè§£ã«æ²¿ã£ãŠãããã¯å®éã«ã¯ãã°ã§ã¯ãããŸããã
ãã ããPython以å€ã®HTTPã¯ã©ã€ã¢ã³ãã®äžéšãauthããããŒã_did_åãæž¡ããããã§ãªãå Žåã§ãæ£åžžã«æ©èœããŠããçç±ã«ã€ããŠãããããæ··ä¹±ããå¿
èŠããããããå€ãã®æéãè²»ãããŸããã 1ã€ã®ææ¡ïŒããã§warnings
ãä»ããŠèŠåãçºè¡ããããããŒãååšããŠåé€ãããŠãããšãã«çºä¿¡è
ã«ããããããããããšããå§ãããŸãã ãããçºä¿¡è
ã«èŠåãããããªããã®ã§ãããšããããšã¯ãã£ãã«ãªããšæããŸãã
@tlantzéåžžãããã¯ããªãåççã«æããŸãã ãããžã§ã¯ããšããŠã®ãªã¯ãšã¹ãïŒããã³ãã®äŸåé¢ä¿ã®1ã€ã§ããurllib3ïŒã¯ãwarningsã¢ãžã¥ãŒã«ãŸãã¯ãã®ã³ã°ãä»ããŠäœããã®èŠåãçºè¡ãããšãã«ããªãã®æããåŒãèµ·ãããŸããã ããã«ãèŠåã¢ãžã¥ãŒã«ã¯ãããšãã°ãæè¿ã®ããŒãžã§ã³ã®OpenSSLã«å¯ŸããŠã³ã³ãã€ã«ãããããŒãžã§ã³ã®Pythonã䜿çšããªããªã©ããŠãŒã¶ãŒãã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããã®ã®ããã®ãã®ã§ãã
ã»ãšãã©ã®å Žåããã®åäœã¯ãããšãã°TLSæ¥ç¶ã®èšŒææžãæ€èšŒã§ããªãã»ã©åé¡ã«ã¯ãªããŸããã ããã¯æããã«ããªãããã®åé¡ã«ã€ããŠåœŒãã®æ¬ç©ã®ãããŠæ£åœãªæ¬²æ±äžæºãè¡šæããä»ã®èª°ããå©ããŸããã ãã®ããšã念é ã«çœ®ããŠããããDEBUG
ã¬ãã«ã§ãã°ã«èšé²ããæ¹ãããã®ã§ã¯ãªãããšæããŸãã 誰ãããã®ã³ã°ïŒäžè¬çã«ã¯ãŸãšããªæ¹æ³ïŒã䜿çšããŠããŠããã®ã¬ãã«ãæå¹ã«ãããšããã°ã衚瀺ãããŸãã ããã«ããªã¯ãšã¹ãèªäœã®ãã°ãéåžžã«å°ãªãããšãèãããšãããã¯ãããã°ãã°ãšããŠããªãç®ç«ã€ããã«ãªããŸãã ããã¯å
¬æ£ãªãã¬ãŒããªãã®ããã«èŠããŸããïŒ
ãããããã¯å®å
šã«å
¬æ£ãªãã¬ãŒããªãã®ããã§ãã warnings
åšãã®æšè«ã¯ãç§ã«ã¯çã«ããªã£ãŠããŸãã 30åã»ã©æžæãé ã«ã¯ããšã«ããDEBUG
ã§èªåã®ãã®ã®åšãã«logging
è¿œå ããŠãããšæãã®ã§ã DEBUG
ã¡ãã»ãŒãžã ãšæããŸãäœãæ©èœããŠããªãã®ããç解ããããšããŠäººã
ãç«ã¡åŸçããŠããã±ãŒã¹ã®95ïŒ
ã«åœããã§ãããã
ã»ãã·ã§ã³ã䜿çšããŠAuthorizationããããŒãä¿æããŠããŸããããªãã€ã¬ã¯ãã§éä¿¡ãããŠããŸãã
ãªã¯ãšã¹ãïŒ2.18.4ïŒ
ååãšç§ã¯ããã®åäœã«çŽæ¥é¢é£ããåé¡ã®ãããã°ã«å°ãªããšã2æéè²»ãããŸããã ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ãAPIåŒã³åºããapi.my-example-site.org
ããwww.api.my-example-site.org
ãªãã€ã¬ã¯ãããããšã§ãã ããããŒã¯ãªãã€ã¬ã¯ãæã«åé€ãããŠããŸããã
ãããæå³ãããåäœã§ããå ŽåïŒãŸãã¯è¿ãå°æ¥å€æŽãããªãå ŽåïŒãå°ãªããšãããã¥ã¡ã³ãã«è¿œå ããŠããã ããŸããïŒ ç§ã¯èªåãééã£ãŠããããšãç解ããããšããŠããã¥ã¡ã³ããèªãã§åèªãã Request
ã¯ã©ã¹ã®ãã¹ãŠã®ã³ãŒããèªã¿ãŸããã ããã¥ã¡ã³ãã§ãã®åäœã«é¢ããèŠåã衚瀺ãããŠããå Žåã¯ãæ°åã§åé¡ãä¿®æ£ã§ããã¯ãã§ãïŒãã®ã¹ã¬ãããèŠã€ããŠããã®æéã§ãïŒã ãã ããããã¥ã¡ã³ãã®ééã£ãéšåãèªãã§ããå¯èœæ§ããããŸãã
ããã«ã¡ã¯@ndmeiri ãã«ã¹ã¿ã ããããŒã®èŠåºãã®äžã«ãããªã¯ãšã¹ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ãã§ããã«ã€ããŠã®åŒã³ããããããŸãã ããã眮ãã®ã«ãã£ãšè¯ãå Žæããããšæããããç§ãã¡ã¯ããªããæã£ãŠããææ¡ãæ€èšãããŠããã ããŸãã ãã®ãã±ãããšã¯çŽæ¥é¢ä¿ããªãã®ã§ãå¥ã®å·ãŸãã¯PRã«ç§»åããããšããå§ãããŸãã ããããšãïŒ
ããã«ã¡ã¯@nateprewitt ãã«ã¹ã¿ã ããããŒã»ã¯ã·ã§ã³ãææããŠãããŠããããšãïŒ æããã«ãç§ã¯ããã¥ã¡ã³ãã®ãã®éšåããã§ãã¯ããããšãèããŠããŸããã§ããã
èªèšŒã®ã»ã¯ã·ã§ã³ã«ãã³ãŒã«ã¢ãŠããŸãã¯ã³ãŒã«ã¢ãŠããžã®åç §ãå«ãããšäŸ¿å©ã ãšæããŸãã çŸåšã¯ããªãå¿ããã§ãããèœã¡çãããPRãéããŠããã¥ã¡ã³ããæŽæ°ããããšãæ€èšããŸãã
ãããæå³ãããåäœã§ããå Žå
@ndmeiriã¯ããä¿¡é Œã§ããªãå¯èœæ§ã®ãããœãŒã¹ã«æ©å¯èªèšŒè³æ Œæ å ±ãæŒãããªãããã«ããããšãç®çãšããŠããŸãã ïŒãã æ確ã«ããŸãïŒ
ïŒ4983ã®ãä¿¡é Œã§ãããã¡ã€ã³ãã¯sessions.pyã®å®è£ ã«å«ãŸããªããªã£ãããã§ãã
ç¹å®ã®ç°ãªããå®å šãªURLã«ãªãã€ã¬ã¯ãããããšã_ç¥ã£ãŠãã_URLã«ãªã¯ãšã¹ããéä¿¡ããŠããŠãAuthorizationããããŒã®æ°žç¶æ§ã䜿çšããŠãªãã€ã¬ã¯ããæå¹ã«ãããå Žåãã©ãããã°ãããå®çŸã§ããŸããïŒ
ã©ãããã°ãããéæã§ããŸããïŒ
rebuild_auth
ã¡ãœããã«ããããé©çšã§ããŸãã ããã¯ç§ã®ããã«åããŸãïŒ https ïŒ
@ j08lueããããšãïŒ ã³ã¡ã³ããå±ãåã«ã allow_redirects
ãFalse
ã«èšå®ãããŠãŒã¹ã±ãŒã¹ã§äºæ³ãããããã€ãã®ç¹å®ã®ãªãã€ã¬ã¯ãã«æ瀺çã«åŸãã³ãŒããè¿œå ããããšã§ããã®åé¡ãåé¿ããŸããã ããã¯ç§ã«ãšã£ãŠçæçãªç¶æ³ãªã®ã§ããããé©åãªäžæçãªè§£æ±ºçã§ããããšãé¡ã£ãŠããŸãããå¿
èŠã«å¿ããŠé·æçã«ãããè¡ãããã®ããè¯ãæ¹æ³ãããããšãç¥ã£ãŠããã®ã¯çŽ æŽãããããšã§ãã
æãåèã«ãªãã³ã¡ã³ã
Neståºæã®åé¿çã¯2ã€ãããŸãã
1ã€ã¯ãAuthorizationããããŒã䜿çšããã®ã§ã¯ãªããaccess_tokenã§
auth
ãã©ã¡ãŒã¿ãŒãæž¡ãããšã§ãã https://gist.github.com/tylerdave/409ffa08e1d47b1a1e23ã§ãããèŠã€ããŸãããã1ã€ã¯ã䜿çšããããããŒãå«ãèŸæžãä¿åãããªãã€ã¬ã¯ãã«åŸããã«ãããããŒãå床枡ã2çªç®ã®èŠæ±ãè¡ãããšã§ãã