一剑修行 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 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大