Fold All / Expand All

2016年5月14日 星期六

[Lyric Get] urllib3 not working on Google App Engine SDK?

再喊一次「珍惜生命 遠離GAE」

不過還是很懶,沒有找其他的 hosting solution

先前文章:

由於 petitlyrics 需要在 header 送「X-CSRF-Token」,但是 Python 的 urllib2 以及 Google App Engine 都會"好心地"把 header key 改為首字大寫,也就是變成「X-Csrf-Token」,然後就爆炸了,400 Bad Request

之前嘗試用 Python requests 這套 library 去送,就不會讓 header key 被改大小寫,但是在 pure Python 跑正常,放進 Google App Engine 就爆炸了

有一陣子,petitlyrics 對日文歌詞還會擋非日本 IP,所以就先丟著沒修,從 Lyric Get 的支援站台移除,今天去看,發現又可以看到日文歌詞了,而且 pure Python 送 request 是拿得到東西的!所以只要把 requests 在 GAE 不支援的問題處理掉,就可以跑了

然後就花了2個小時吧…

因為忘記首字大寫的問題,一開始還改回用 urllib2 試,很快地就發現會爆炸

搜尋一下其他的 request library,在 Python requests 用到的 urllib3,有文章指出從某一版本之後,GAE 就有支援 urllib3 了,所以就來嘗試寫看看吧

urllib3 的 document 實在很爛

不知道是因為裡面 reuse 其他 component ,所以就不寫了還是怎樣,一開始還找不到如何拿 response data
(謎:其實是你自己的問題,明明第一個 Usage 就有寫 r.data)

好吧,亂試一通後,終於成功用 urllib3 發 request,也的確不會改到 header key 大小寫,cookie 問題,也自己把 cookie 記下來,自己加到 header

但是 Google App Engine SDK,也就是 local 端自己電腦試,仍然失敗!?

而且 Logs 也沒噴錯誤,就默默的沒反應,開 Wireshark 送了第一個 request 後就不做事了

正想著要放棄的時候,因為有 update musixmatch 的 module,所以還是 Deploy 一下,把 petitlyrics 的網址丟進 production 上,竟然歌詞就跑出來了…

看來的確是有 urllib3 在 Google App Engine Production 可以用,但是 SDK 不行的問題…

目前使用版本
urllib3: 1.15.1
GAE SDK: 1.9.37
Python: 2.7.11

不過 Lyric Get 上還先沒有把 petitlyrics 的連結放回來,不過網址丟進去是會 parse 啦

沒有留言: