如何用 Python 循环发送 POST 请求,其中携带的 data 参数需从 json 循环 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
RayGZJ
V2EX    Python

如何用 Python 循环发送 POST 请求,其中携带的 data 参数需从 json 循环

  •  
  •   RayGZJ 2022-09-19 18:56:58 +08:00 2518 次点击
    这是一个创建于 1175 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #按行读取 for i in range(minrow,maxrow+1): for j in range(mincol,maxcol+1): cell=sheet.cell(i,j).value json_cell = json.dumps(cell) #print(cell) params_json = json.loads(json_cell) print(json_cell) #print(params_json) url = 'http://1.1.1.1:9100/shydyy/ewm/CheckTodaySjyxYxjl' headers = { 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1', 'Host': '120.195.21.171:9100', 'Origin': '1.1.1.1:9999', 'Referer': '1.1.1.1:9999/', } data = { 'TEL': json_cell, 'YGH': '13400863', } for i in range(minrow, maxrow + 1): respOnse= requests.post(url, headers=headers, data=data) print(data) print(response.text) 

    从 excel 表格的第一行读取循环到最后一行并给一个 json 量,用的是 openpyxl 读取 赋值完成之后 我需要根据行数来确定循环多少次 openpyxl 中通过 sheet.max_row 也可实现

    每次都需逐行读取 json 替换为 data 中的 TEL 参数并发送一次 POST 请求直到遍历结束

    按照上面写每次都只读取最后一个数,各位大佬有什么好的办法吗?

    第 1 条附言    2022-09-20 01:13:38 +08:00
    {'msg': '可以正常提交', 'res': 0, 'error': ''} 

    用r.json获得的,如何提取msg并赋值呢 get对于响应返回不能用 str类的

     print("--------------["+str(cell)+"]------------- ") print(response.status_code) print(response.json()) print("------------------------------------------ \n") 
    12 条回复    2022-09-19 21:56:37 +08:00
    chunhai
        1
    chunhai  
       2022-09-19 19:25:28 +08:00
    没怎么看明白。你为啥先 dumps 后又 loads
    RayGZJ
        2
    RayGZJ  
    OP
       2022-09-19 19:29:10 +08:00 via iPhone
    @chunhai
    好像不是 str 类型没法把值给普通量
    所以 load 下 初学
    killva4624
        3
    killva4624  
       2022-09-19 19:34:58 +08:00
    没太明白。
    读取的总数为 row * col 个,但发送的次数只有 row 次。那每次发哪个值呢?
    xianyuyitiao
        4
    xianyuyitiao  
       2022-09-19 19:39:21 +08:00
    没太看懂你这个是不是就是完整的 如果就是帖子这样的话肯定是有问题的 你第一个 for 循环完了才走的下面的逻辑 拿到的 json_cell 就是最后一个 正常把 post 请求的逻辑写成一个函数,如果可变的只有 data ,将 data 设置为参数,for 循环拿参数值直接调用函数就好了,只需要 for 循环一次
    RayGZJ
        5
    RayGZJ  
    OP
       2022-09-19 19:39:47 +08:00 via iPhone
    @killva4624 我只有一列数据 for 循环它的行数就是要遍历的次数
    thinkershare
        6
    thinkershare  
       2022-09-19 19:42:05 +08:00
    你这样写的话? i 有什么用呢? 你的 data 需要随着 i 的变化发生变化.
    killva4624
        7
    killva4624  
       2022-09-19 19:43:29 +08:00
    @RayGZJ 遍历数据和 POST 在一个循环里做。
    RayGZJ
        8
    RayGZJ  
    OP
       2022-09-19 19:55:10 +08:00 via iPhone
    @xianyuyitiao

    是这个意思 老大 前面的代码是读取 excel 的代码

    简单来说 xlsx 文件只有一列 100 行的手机号数据

    我想通过 post 向服务器递交两个参数
    tel 及员工号

    员工号不变 tel 要随着逐行地区的数据遍历结束 并将服务器的 respone 写入到日志文件
    RayGZJ
        9
    RayGZJ  
    OP
       2022-09-19 20:01:19 +08:00 via iPhone
    @thinkershare 我不太会写循环 因为是业余爱好者 下午看了三种 python 循环方式 按照上面写的…
    xianyuyitiao
        10
    xianyuyitiao  
       2022-09-19 20:26:06 +08:00
    简单的改了下你的 大概就是这么个意思
    ```python

    for i in range(minrow,maxrow+1):
    for j in range(mincol,maxcol+1):
    cell=sheet.cell(i,j).value
    #上面用的你原来的逻辑,如果只有一列,列值可以写死,就不用两个 for 循环了
    # 不知道哪个库,value 是什么类型,直接转 str 不知道可不可以,需要调试下
    tel = str(cell)
    res_text = post_tel(tel)



    def post_tel(tel):
    url = 'http://1.1.1.1:9100/shydyy/ewm/CheckTodaySjyxYxjl'
    headers = {
    'User-Agent':
    'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
    'Host': '120.195.21.171:9100',
    'Origin': '1.1.1.1:9999',
    'Referer': '1.1.1.1:9999/',
    }
    data = {
    'TEL': tel,
    'YGH': '13400863',
    }
    respOnse= requests.post(url, headers=headers, data=data)
    # 这边最好做个是否正确请求的判断
    return response.text

    ```
    xianyuyitiao
        11
    xianyuyitiao  
       2022-09-19 20:26:42 +08:00
    @xianyuyitiao 格式没有生效 不知道这个回复怎么调代码格式
    RayGZJ
        12
    RayGZJ  
    OP
       2022-09-19 21:56:37 +08:00
    @xianyuyitiao
    我通过这个方法解决了

    '''
    for i in range(minrow, maxrow + 1):
    cell = sheet.cell(i, 1).value
    #json_cell = json.dumps(cell)
    print("for "+cell)
    data = {
    'TEL': cell,
    'YGH': '13400863',
    }
    i=+1
    respOnse= requests.post(url, headers=headers, data=data)
    print(data)
    print(response.text)
    '''
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1231 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:59 PVG 00:59 LAX 08:59 JFK 11:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86