Steam FileUploader发布请求:缺少SteamID

时间:2018-06-02 19:01:42

标签: python http python-requests

我正在尝试编写一个自动将个人资料图片上传到Steam的脚本。我现在把它写成一次性使用以确保它有效。我正在尝试使用python请求来完成此任务。

无论我尝试什么,我总是得到#Error_BadOrMissingSteamID作为对我的帖子请求的回复。

网址为https://steamcommunity.com/actions/FileUploader?type=player_avatar_image&sId=YourId&bgColor=262627,其中YourId替换为您的SteamID64。我知道这个网址有效,因为我可以在我的浏览器上查看它,对我的请求的响应总是200。

网页非常简单,它有一个选择文件...按钮,一个显示文件名的文本框和一个上传按钮。这是来源的重要部分:

<body>
<form enctype="multipart/form-data" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
    <input type="hidden" name="type" value="player_avatar_image" />
    <input type="hidden" name="sId" value="MyId" />
    <input type="hidden" name="sessionid" value="SessionId" /> 
    <input type="hidden" name="doSub" value="1" />
    <input type="file" name="avatar" size="16" />
   <input id="submitBTN" input type="submit" value="Upload" />
</form>
</body>

我用MyId和SessionId替换了实际的会话/蒸汽ID。

我一直在尝试很多东西,但这基本上就是我所拥有的:

import requests

url = 'https://steamcommunity.com/actions/FileUploader'
picture = open("test.png", "rb")

r = requests.post(url=url,data={"type":"player_avatar_image","sId":"MyId"},files={"avatar":picture},headers={"sessionId":"SessionId"})
print(r.text)

我尝试过使用Multipart Encoding,玩弄数据/标题参数,但我一直都遇到同样的错误。

如何成功传入SteamID?我知道param名称是“sId”,因为这是在url和html中使用的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我不完全确定你需要什么,(肯定会有很多修改,但是无论何时使用请求,使用cURL都是非常有益的。你可以访问网络选项卡中的进程并将它们复制为cURL。是cURL to Python-Requests Resource,因此您可以将cURL代码转换为python-requests语法。它将保留所有登录标题和cookie,这样您就不必经历复制它们和制作它们的所有繁琐工作。确定你有合适的。

答案 1 :(得分:0)

您需要至少向Steam提供steamLoginsteamLoginSecuresessionid Cookie,以便它可以对您进行身份验证。将这些Cookie添加到request,您应该没问题。

以下是适用于我的代码:

import requests

url = 'https://steamcommunity.com/actions/FileUploader'
i = '76561198246664798' # enter ID64
cookies = {
    'steamLogin': '',
    'steamLoginSecure': '',
    'sessionid': '',
}
data = {
    "MAX_FILE_SIZE": "1048576",
    "type": "player_avatar_image",
    "sId": "",
    "sessionid": "",
    "doSub": "1",

}
picture = open('pic.png', 'rb')
r = requests.post(url=url, params={'type': 'player_avatar_image', 'sId':i}, files={'avatar': picture}, data=data, cookies=cookies)

填写所需的值并完成。