barbruh.22.10.04

草神的完整技能视频终于放出来了,照例将其上传到discord上,然后发现它居然超过了50MB(悲🤔本能反应打开nacho impact(大嘘)开始上传,然后突然意识到guilded现在需要加上cookies才能正常上传,所以那个html得魔改一下🤔

但在使用xhr.setRequestHeader加cookies请求头后,它上传仍然报错未登录,而且观察请求时发现它也没有加上任何cookies头🤔查了一顿发现貌似setRequestHeader压根就不支持加cookies头,按照所谓的w3c规范,cookies这样的请求头只能由浏览器生成和控制,js脚本并没有权限(恼🤔而在给浏览器塞cookies方面,我尝试了写入document.cookie,但请求头里仍然没有出现cookies,不仅如此,浏览器的存储选项卡里也没找到写入后的cookies🤔再说了,guilded的cookies作用域还得设成什么guilded.gg,而且如果用我的存放在别的乱七八糟地方的html操纵这些cookies的话还得涉及什么跨站请求乱七八糟的,不折腾了(恼🤔

那么为了实现上传过程中带cookies,现在我恐怕只能尝试中转方案了🤔也许我可以使用cloudflare workers来搞这个,就像我搞什么nitro delegation一样,但既然我可以在pikapod的wp-content里面跑oneindex,那么我是不是可以拿php来写一个透传post请求,但只是给请求塞进去cookies请求头的玩意?🤔通过它我基本上可以实现html该怎样还是怎样,用户也能直接上传东西,而我也不用担心什么cookies泄露或者需要用户提供guilded cookies这种蛋疼的事情了🤔而且这样可能还有额外的好处,pikapod的wp容器可以将上传限制调到比如1GB,所以和借助cloudflare不同,它还能支持到上传500MB文件(确信🤔

问题是我上次写php玩意大概还是我上大学的时候,现在我早就忘了php怎么用了,更别说写一个php版curl玩意了(恼🤔

bruhfei

现在php里获取post请求原始数据的方式是file_get_contents(php://input)(又有一说是php://stdin或者常量STDIN,但我没尝试成功过)🤔接下来可能需要在php.ini里(当然对于pikapod的wp容器来说,upload.ini就是php.ini换了个叫法)加一行enable_post_data_reading = Off才能在content-type被设为multipart/form-data的时候用php://input读post请求原始数据🤔php当然也可以获取所有请求头,并在里面加入cookies项,但当我尝试将它们按照原样塞进php的curl函数里面并发送出去时,guilded返回了一个400错误,意思是我没有提供上传的文件,wiebitte?🤔

最后改了114514遍后,基本上确定问题出在哪儿了:全盘照搬发往php的请求头肯定不可取,但我懒得排查哪个请求头导致了问题,我现在基本上只知道它那么多请求头里只有一个content-type是绝对必要的,因为它里面包括了一个叫做boundary的参数,和请求体里分段的boundary得能对上🤔只需要在所有请求头里筛选出content-type,然后再加上cookies(如果愿意的话这里还可以再加一大堆请求头,什么user-agent之类的,但我不加它也能上传,那我就懒得加了,除非哪天它改版了需要这些玩意),再加上原封不动的请求体,此时再发出请求,它终于可以返回guilded链接了(悲🤔

最后还有一个巨坑,php的响应输出是响应头和响应体不分,和cgi-bin(或者说curl -i)一个德性,但和cgi-bin不一样的是它做不到直接将这坨玩意echo出去就能构成整个(返回给浏览器的)响应了,还得手动设置好响应头🤔而且更神奇的是我找了114514个办法都没法将响应头和响应体分开,所以最后我只能在这坨玩意里取最后一行作为响应体echo出来,并设置一个固定的响应头Content-type: application/json了(恼🤔

吴内鬼,来点k-kawaii nahida chan:

thonk

使用pikapod中转的好处当然是大小没有什么死🐴100MB限制,而且也用不着注册什么顶级域名🤔缺陷也是存在的,上传稍大的文件时可以看出中转脚本先自己用某个变量吃下了整个请求,再上传到guilded,这样的话在这个过程中不仅会有明显的延迟,还会明显地占用上传文件体积那么大的内存空间(悲🤔在最极端的情况下,有4人在同时用这玩意,每人都在上传500MB的大文件,直接2GB内存被占用完🤔

再说了,在php.ini里面开启enable_post_data_reading = Off之后,中转脚本是能用了,但别的php程序会出问题,它们可能依赖php自动处理multipart/form-data请求的功能,关掉这个功能后甚至连wp的发布/修改文章功能都能被橄榄(恼🤔

综上我只能再去创建一个pikapod小号,然后撸一个新的wp站了(恼🤔现在pikapod貌似没法随便用域名邮箱注册了,但至少gmail的加点大法还是可以用的,所以懂的都懂(大嘘🤔这次上了2GB内存,白嫖版本的内存容量上限,好,现在法克晴仍然可以照常更新文章了,而且guilded也能上传,乳刻,请(吴慈悲🤔

发表评论