他们已停用http://old.postimage.org因此我必须使用https://postimg.io/upload.php
之前一直在使用这个:
curl -F "upload=@cache\cover_art.jpg;filename=cover_art.jpg" -F "adult=no" "https://old.postimage.org/"
但它已不再适用了。
答案 0 :(得分:2)
从表面上看,以下内容可行:
curl -F "Filedata=@cover_art.jpg;filename=cover_art.jpg;type=image/jpeg;" \
-F "token=61aa06d6116f7331ad7b2ba9c7fb707ec9b182e8" \
-F "upload_session=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-F "adult=0" "https://postimage.io/upload.php"
这给出了一个JSON结果,如:
{
"status": "OK",
"total_uploaded": 1,
"url": "\/\/postimg.org\/image\/4crb2b603\/9bfe3a80\/"
}
如果查看https://postimage.io/页面,您会发现:
var upload_session = rand_string(32);
服务器似乎检查了upload_session
的正好32个字符,所以:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
。
变量token
似乎是硬编码的(对于不同的请求/ IP / UA也是如此)。可能会定期更改或根据其他参数进行更改,因此您可以使用gawk
curl -s "https://postimage.io/" | \
gawk 'match($0, /'\''token'\''\s+:\s+'\''(.*)'\''/, data) {print data[1]}'
或使用grep:
curl -s "https://postimage.io/" | grep -oP "'token'\s+:\s+'\K(\w+)"
所以下面的脚本可以使用curl,grep和jq(JSON解析器),它返回生成的uri值:
token=$(curl -s "https://postimage.io/" | grep -oP "'token'\s+:\s+'\K(\w+)")
curl -s -F "Filedata=@cover_art.jpg;filename=cover_art.jpg;type=image/jpeg;" \
-F "token=$token" \
-F "upload_session=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
-F "adult=0" "https://postimage.io/upload.php" | \
jq -r '"https:" + .url'