如何在Python中“直接”执行HTTP Post

1 投票
3 回答
914 浏览
提问于 2025-04-17 05:55

我对HTTP的GET和POST方法之间的区别了解不多,所以希望能从更懂的人那里得到一些信息。

我写了以下代码:

<form action="https://na.leagueoflegends.com/user/login" method="post">
    <input name="name" type="text" value="MYACCOUNTLOGINUSERNAME">
    <input name="pass" type="password" value="PASSWORD">
    <input name="form_id" id="edit-user-login" value="user_login">
    <input class="login_button" value="Submit" type="submit" style="width:100px">            
</form>

当我输入正确的用户名和密码,然后点击提交按钮时,我可以顺利登录网站。

但是,当我把方法从POST改成GET时,它返回了这个链接:https://na.leagueoflegends.com/user/login?name=MYACCOUNTLOGINUSERNAME&pass=PASSWORD&form_id=user_login,点击这个链接却无法登录。

我的问题是,是否可以通过Python直接进行POST请求,而不需要创建表单,只需打开一个包含正确参数的URL,然后把这些参数POST到服务器上?

提前感谢大家的知识、建议和回答。

3 个回答

1
import urllib
import urllib2

url = 'https://na.leagueoflegends.com/user/login'
params = urllib.urlencode({
  'name': 'MYACCOUNTLOGINUSERNAME',
  'pass': 'PASSWORD',
  'form_id': 'user_login'
})
response = urllib2.urlopen(url, params).read()

urllib2 教程

2

为了这个目的,最先进的库可能就是requests了。

>>> import requests
>>> response = requests.post(... your args here ...)

可以参考requests.post的文档。

1

登录基本上就是获取一个小饼干(cookie)。当你发送一个POST请求后,服务器会给你一个小饼干,这个小饼干可以让你在之后的GET请求中被识别和验证。不过,GET请求本身是不能用来验证你的,除非服务器特别允许这样做(但其实不应该允许,因为这样很不安全)。所以,简单来说,你的问题的答案是“不能”。

把这个小饼干放到真正的浏览器里并不简单。如果你只是想自动登录,我建议你使用mechanize这个工具。如果你还想自动做其他事情,可以看看urllib2或者requests,这两个都是很不错的HTTP请求库。

撰写回答