Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python脚本(请求库)登录网站?_Python_Http_Web_Urllib2_Python Requests - Fatal编程技术网

如何使用Python脚本(请求库)登录网站?

如何使用Python脚本(请求库)登录网站?,python,http,web,urllib2,python-requests,Python,Http,Web,Urllib2,Python Requests,我正在尝试使用Python库登录一个名为surfline.com的网站,然后登录后获取一个网页(大概是在一个持久化数据库中) surfline.com在其整个页面中使用的登录表单使用onclick()映射到一个名为verifyLogin()的JS函数,该函数反过来会发布到一个.cfm文件。在success上,它刷新页面,并且只要cookie持续存在,用户现在就保持登录状态 我是第一次使用图书馆,不确定如何: 登录成功 在整个会话期间保持登录状态 然后将主页作为登录用户打印到终端 以下是登录表单(

我正在尝试使用Python库登录一个名为surfline.com的网站,然后
登录后获取一个网页(大概是在一个持久化数据库中)

surfline.com在其整个页面中使用的登录表单使用
onclick()
映射到一个名为
verifyLogin()
的JS函数,该函数反过来会发布到一个
.cfm
文件。在
success
上,它刷新页面,并且只要cookie持续存在,用户现在就保持登录状态

我是第一次使用图书馆,不确定如何:

  • 登录成功
  • 在整个会话期间保持登录状态
  • 然后将主页作为登录用户打印到终端
  • 以下是登录表单(HTML):

    我尝试过这段代码,但似乎无法以登录用户的身份获取主页;它仍然会返回给未登录的用户(我的全名应该出现在标题中,等等):

    导入请求,json >>>s=请求。会话() >>>第_页签出=s.get('http://www.surfline.com/home/index.cfm') >>>form_data={'type':'POST', …'url':'/myaccount/inc_login_handler.cfm', …'数据':“用户名”=myemail@example.com&password=mypassword&rememberMe=true&top\u login=true“, …“缓存”:False} >>>美国邮政(url, …data=json.dumps(form_data), …头={'content-type':'application/json'}) >>>第\u页已签名\u in=s.get('http://www.surfline.com/home/index.cfm')
    基本上,我如何从python文件登录到surfline.com,并以登录用户的身份获取页面?如果
    请求
    库不可能,我不介意使用其他库。多谢各位

    编辑: 以下是@André建议的帖子发布后的cookies


    我尝试登录该网站,同时监视使用Firebug发出的请求,看起来数据是
    应用程序/x-www-form-urlencoded
    格式,而不是
    应用程序/json
    ,而且您还误解了Javascript代码中的一些值,
    类型
    url
    data
    cache
    是AJAX调用的参数,而不是应该发送到服务器的实际数据

    这是希望的工作代码,在POST请求中替换您的电子邮件和密码

    from requests import Session # we can just import Session, no need to import the entire requests
    
    s = Session() # new session
    
    page_signed_out = s.get('http://www.surfline.com/home/index.cfm') # gets signed out page, this will set eventual cookies that may be needed later
    
    s.post("http://www.surfline.com/myaccount/inc_login_handler.cfm", {"username":"myemail@example.com", "password":"mypassword", "rememberMe":"true", "top_login":"true"}) # does the actual login, if successful this will set a session cookie
    
    page_signed_in = s.get('http://www.surfline.com/home/index.cfm') # good, we're logged in
    

    编辑:

    或者,如果由于任何原因,surfline.com未能成功让您登录,您可以在实际登录时复制浏览器中植入的cookie,并将其“粘贴”到您的程序中,然后将其与您的请求一起传递

    from requests import Session
    
    s = Session()
    s.cookies["s_cc"] = "your_session_cookie" # replace this with your actual login cookie
    
    page_signed_in = s.get("http://www.surfline.com") # you're logged in :)
    

    如果你也是一个冲浪者,只是想让流整天玩,我会提示你检查一下他们的flash播放器的RTMP连接

    更大的提示是:

    tcpdump-A-n-s0-r file.tcpdump | grep connect

    当访问cam页面和RTMP流的grep时


    但是你可能会去做其他事情,然后这就偏离主题了。

    好吧,在我在
    s.post()调用中发布正确的数据后,cookies似乎出现了,所以它成功登录了。但是,对“”的第二次调用仍在返回页面,就好像用户未登录一样。我是否必须将cookies作为参数传递给第二次调用或类似的调用?(我将在下一条评论中发布
    RequestsCookieJar
    ,这样你就可以看到)实际上,它太长了,我将在问题中发布编辑在Chrome设置中检查,我发现成功登录后由Surfline放置的cookie与
    会话
    对象中找到的cookie不同(例如,有一些称为
    用户ID
    设置SID
    ),并且没有像在
    会话
    对象中那样的
    注销
    cookie。因此,我认为登录毕竟没有成功。有没有办法从我的机器上一字不差地运行JavaScript函数,将用户名和密码字段写入文件?@sgarza62如果登录cookie的生存期是只要足够长的时间,您就可以直接将其值从浏览器复制粘贴到脚本中。@sgarza62我改进了您的编辑,不需要使用cookie jar,您只需使用
    会话
    的“cookies”属性作为字典,请参见我的答案。我正在为自己构建预测数据的不同前端表示(不同的布局和添加的功能),但现在你给了我下一个项目的想法。很高兴遇到另一个冲浪程序员-珍稀面包。干杯,布拉德,这完全是我想要的!布拉德,这种方法对你仍然有效吗?rmtp流似乎过了一段时间就不起作用了。也许我不清楚你是如何使用它们的。
    >>> import requests, json
    >>> s = requests.Session()
    >>> page_signed_out = s.get('http://www.surfline.com/home/index.cfm')
    >>> form_data = {'type':'POST',
    ...              'url':'/myaccount/inc_login_handler.cfm',               
    ...              'data':"username=myemail@example.com&password=mypassword&rememberMe=true&top_login=true",
    ...              'cache':False}
    >>> s.post(url,
    ...        data=json.dumps(form_data),
    ...        headers= {'content-type': 'application/json'})
    <Response [200]>
    >>> page_signed_in = s.get('http://www.surfline.com/home/index.cfm')
    
    from requests import Session # we can just import Session, no need to import the entire requests
    
    s = Session() # new session
    
    page_signed_out = s.get('http://www.surfline.com/home/index.cfm') # gets signed out page, this will set eventual cookies that may be needed later
    
    s.post("http://www.surfline.com/myaccount/inc_login_handler.cfm", {"username":"myemail@example.com", "password":"mypassword", "rememberMe":"true", "top_login":"true"}) # does the actual login, if successful this will set a session cookie
    
    page_signed_in = s.get('http://www.surfline.com/home/index.cfm') # good, we're logged in
    
    from requests import Session
    
    s = Session()
    s.cookies["s_cc"] = "your_session_cookie" # replace this with your actual login cookie
    
    page_signed_in = s.get("http://www.surfline.com") # you're logged in :)