有人可以帮我用Curl上传到postimg吗?

时间:2017-06-28 18:47:27

标签: curl

他们已停用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/"

但它已不再适用了。

1 个答案:

答案 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'