【问题标题】:How to Perform a HTTP Post "directly" in Python如何在 Python 中“直接”执行 HTTP Post
【发布时间】:2011-11-09 06:41:23
【问题描述】:

我不太了解 HTTP Get 和 HTTP 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,让我登录并将它们发布到服务器?

提前感谢您提供知识、建议和/或答案。

【问题讨论】:

  • 使用与上述相同的表单,在加载此页面时添加 AJAX 帖子。有一个回调将您重定向到该站点内的任何页面。比编写 Python 后端代码更快。
  • 感谢您的评论。 “更快”是什么意思?响应时间? CPU时间?编程时间?
  • 在编程和调试时间方面“更快”。除非轮子坏了,否则尽量重复使用。

标签: python html post get


【解决方案1】:

用于此目的的最复杂的库可能是requests

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

参照。 requests.post的文档。

【讨论】:

  • 感谢您的意见,非常感谢。
【解决方案2】:

登录基本上意味着接收 cookie。发送 POST 请求后,您将获得一个 cookie,该 cookie 对您未来的 GET 请求进行身份验证。但是,除非服务器端允许,否则 GET 请求无法验证您的身份(不应该允许,因为它非常不安全)。所以你的问题的答案是“不,不可能”。

将cookie插入真正的浏览器并不是很容易。我建议您使用mechanize,如果您想自动化登录过程并且不自动执行任何其他操作。如果您还想自动化其他事情,请查看 urllib2requests 以获得良好的 HTTP 请求 API。

【讨论】:

  • 感谢您的意见,它很有帮助。
【解决方案3】:
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 Tutorial

【讨论】:

  • 感谢您提供如此丰富的答案。我已经尝试实施你所说的。如果我打开可以登录na.leagueoflegends.com 的网站的主页,然后运行您的代码并刷新我未登录的页面?关于为什么当我刷新页面时这不会让我登录或如何从你给我的内容中获取我可以输入浏览器地址栏以让我登录网站的 URL 的任何想法?再次感谢您提供的所有信息!
  • Uku Loskit 是正确的,您必须将返回的 cookie 插入您选择的浏览器,而我的代码没有这样做。我认为看看他的建议是个好主意。
猜你喜欢
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2011-07-29
  • 1970-01-01
  • 2012-06-18
  • 2022-01-04
相关资源
最近更新 更多