【问题标题】:Posting a csv file using python directly to php endpoint使用 python 将 csv 文件直接发布到 php 端点
【发布时间】:2018-12-13 20:11:36
【问题描述】:

我正在开发一个应用程序,该应用程序通过将用户上传到 csv 文件中来授予用户访问权限,但遇到了一些问题。

该文件是通过我在网络记录器中看到的多个请求发送的,第一个请求的表单数据如下所示:

文件[]:(二进制) 密码:4 团队成员:6 行动:团队初始检查

发送的第二个请求如下所示:

文件[]:(二进制) 密码:4 团队成员:6 行动:团队初始检查 发送邮件:1 行动:团队创建用户 唯一标识:48vkcuurjowt

最终的请求如下所示:

动作:createusersstatus 密码:4 唯一标识:48vkcuurjowt 团队详情:{"cohort_6":1}

uniqueid 是随机生成的 - 我可以发送我想要的任何内容(我相信),passid 始终为 4,teamid 我可以从页面中抓取,所以这不是问题。

问题在于使用以下代码:

login_headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/70.0.3538.110 Safari/537.36 '
    }


login_data = {
        'username': 'xxxx@xxxx',
        'password': 'xxxxxxxx',
        'anchor': ''
}

with requests.Session() as s:
    s.headers = login_headers
    s.upload_headers = upload_headers
    s.data = login_data
    url = BaseTest.getSiteURL()
    r = s.post(url + '/login/index.php', data=login_data)
    print(r.status_code)
    csv_file = CSV.get_csv()
    file = {'file': open(csv_file, 'rb')}
    step1_data = {
            'action': 'teaminitialcheck',
            'passid': '4',  # Should always be 4 - seems to be the id of the button
            'teamid': '6'  # Has to be scraped from DOM
        }
        r1 = s.post(url + '/local/admin/pages/user/ajax/getcsv.php', params=step1_data, files=file)
        print(r1.status_code)
        step2_data = {
            'passid': '4',
            'teamid': '6',
            'action': 'teaminitialcheck',
            'sendemail': '1',
            'action': 'teamcreateusers',
            'uniqueid': '4cxfre2236u8'
        }
        r2 = s.post(url + '/local/admin/pages/user/ajax/getcsv.php', data=step2_data, files=file)
        #  time.sleep(15)
        print(r2.status_code)
        step3_data = {
            'action': 'createusersstatus',
            'passid': '4',  # Should always be 4 - seems to be the id of the button
            'uniqueid': '4cxfre2236u8',
            'teamdetails': '{"cohort_6":1}'
        }
        r3 = s.post(url + '/local/admin/pages/user/ajax/getcsv.php', data=step3_data)
        print(r3.status_code)

我收到 200 响应 - 但我没有看到用户上传,并且响应内容说明了很多:

b'{"meta":{"fields":false,"usercount":0,"errors":[""],"invalidemail":0,"needseats":false,"displaydownload":false,"general":{"users":[],"errors":[],"invalidemails":0}},"action":"teaminitialcheck"}'

所以就好像我的代码没问题 - 但文件的内容没有一起发送。文件本身只有 2 行,其中一行在第二行包含电子邮件、名字、姓氏和相应的值。

感谢您的帮助。

【问题讨论】:

    标签: php python csv


    【解决方案1】:

    我相信我已经回答了自己的问题。

    答案是:

    该网站 - 当需要一个 CSV 文件将用户上传到时,将简单地弹出每一行并一次提供一个数据。我发现了一个以前没有注意到的选项来上传单个用户,它需要一些简单的数据,我假设这些数据来自 CSV .

    如果他们仍然需要测试 CSV 功能的上传 - 他们可以在比我工作的更低层执行此操作,我不应该在 UI 层担心自己 - 我认为...

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2014-10-11
      相关资源
      最近更新 更多