Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 使用urllib代替wget进行会话身份验证_Python - Fatal编程技术网

Python 使用urllib代替wget进行会话身份验证

Python 使用urllib代替wget进行会话身份验证,python,Python,因此,目前我有一行python代码,它使用wget和os.system从网站下载文件。但是,当我尝试将此wget转换为更优雅的库(如urllib或requests)时,cookies无法进行身份验证,而是下载登录html页面而不是文件 以下是我目前使用的: try: print(URL) os.system( "wget --save-cookies cookies.txt --keep-session-cookies --po

因此,目前我有一行python代码,它使用wget和os.system从网站下载文件。但是,当我尝试将此wget转换为更优雅的库(如urllib或requests)时,cookies无法进行身份验证,而是下载登录html页面而不是文件

以下是我目前使用的:

    try:
         print(URL)
         os.system(
            "wget --save-cookies cookies.txt --keep-session-cookies --post-data='name={}&password={}' https://fakesite/login".format(
                username, password))
         os.system("wget --load-cookies cookies.txt --accept=exe {}".format(URL))

    except Exception as e:
         print(" File not found, please refer to the website manually for download link", e)
我试图将其重构为如下内容:

    try:
    print("Downloading file {} version: {}......".format(version, buildNo))
    with requests.session() as s:
        s.post(loginUrl, data="name:{}&password:{}".format(username,password))
        print(URL)
        r = s.get(URL,cookies=s.cookies, headers={"Accept": "application/octet-stream"})
        print (r.content)

但是这失败了,而是打印登录页面的html内容!有人能解释一下吗?

您应该在查询中使用
=
而不是

s.post(loginUrl, data="name={}&password={}".format(username,password))
此外,您还可以(并且应该按照
请求
最佳实践)对
数据
参数进行dict:

s.post(
    loginUrl,
    data={
        'name': username,
        'password': password,
    }
) 

也许可以检查一下:我尝试了您尝试的方式,但由于登录不成功(将数据更改为data={“username”:“some username”,“password”:“password”},但这是特定于api的)。两个问题,登录响应的状态代码是什么?第二个问题,接受是否正确?另外,在wget示例中,您发送的是name而不是username。我收到了302响应,但我已经更改了get请求以允许重定向,它仍然无法执行。我也注意到了用户名问题,但我还是没有解决我的问题:(