一剑修行 2021-11-06 23:24 采纳率: 100%
浏览 30
已结题

python 爬虫post 时候query parameter确定不了

  • 写回答

1条回答 默认 最新

  • CSDN专家-showbo 2021-11-07 13:22
    关注

    s签名参数在下面这个网址的源代码里面,同时访问这个网址还会生成一个ICITYSession Cookie。t参数主要第二个的计算,通过sig签名计算得到

    img

    http://221.214.94.51:8081/icity/ipro/projectlist
    

    而且题主的接口搞错了,应该是

    http://221.214.94.51:8081/icity/api-v2/app.icity.ipro.IproCmd/getProjectList?s=xxxx&t=xxxx
    
    

    代码如下

    img

    import requests
    import json
    import time
    import random
    
    def getTParam(sig):
        chars = "0123456789abcdef"
        key=""
        keyIndex=-1
        for i in range(6):
            c=sig[keyIndex+1]
            key+=c
            keyIndex=chars.find(c)
            if keyIndex<0 or keyIndex>=len(sig):
                keyIndex=i
        #主要是 key计算,第一个数字是随机生成的,第3个数字为时间戳
        return str(random.randint(1000,10000))+"_"+key+"_"+str(int(time.time()) * 1000)
    
    headers={
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
        'Cookie':''
    }
    referrurl="http://221.214.94.51:8081/icity/ipro/projectlist"
    res=requests.get(referrurl)
    cookies=requests.utils.dict_from_cookiejar(res.cookies)
    headers['Cookie']='ICITYSession='+cookies['ICITYSession']
    sig=res.text
    starts='var __signature = "'
    startindex=sig.find(starts)+len(starts)
    endindex=sig.find('"',startindex)
    sig=sig[startindex:endindex]#得到签名
    
    
    
    url="http://221.214.94.51:8081/icity/api-v2/app.icity.ipro.IproCmd/getProjectList?s="+sig+'&t='+getTParam(sig)
    
    headers['Referer']=referrurl
    headers['X-Requested-With']='XMLHttpRequest'
    headers['Content-Type']='application/json'
    #post发送的数据
    payloadData={"projectcode":"",
                 "projectname":"",
                 "contractor":"",
                 "projecttype":"",
                 "page":1,
                 "limit":10}
    
    
    req=requests.post(url,headers=headers, data=json.dumps(payloadData))
    
    data=req.json()
    
    print(data)
    
    

    有帮助麻烦点下【采纳该答案】,谢谢~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题