我正在尝试编写一个自动将个人资料图片上传到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中使用的。任何帮助将不胜感激。
答案 0 :(得分:0)
我不完全确定你需要什么,(肯定会有很多修改,但是无论何时使用请求,使用cURL都是非常有益的。你可以访问网络选项卡中的进程并将它们复制为cURL。是cURL to Python-Requests Resource,因此您可以将cURL代码转换为python-requests语法。它将保留所有登录标题和cookie,这样您就不必经历复制它们和制作它们的所有繁琐工作。确定你有合适的。
答案 1 :(得分:0)
您需要至少向Steam提供steamLogin
,steamLoginSecure
和sessionid
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)
填写所需的值并完成。