#_*_coding:骆驼翔子-8_*_ 2024-05-02 19:41 采纳率: 90%
浏览 10

python+fiddler爬取微信小程序

现在用fiddler抓取微信小程序:班级小管家
下面是抓取的内容

img

其中,第一个文件是我们需要的。

img

于是,我保存了他的请求内容:

img

内容如下:

POST https://a.welife001.com/getStudentScoreById HTTP/1.1
Host: a.welife001.com
Connection: keep-alive
Content-Length: 68
x-rid: CB0B9BDE-441F-4FD0-8AD8-78665FD27138
imprint: oWRkU0YSmzvhIyCZK30JJ0L-rVRA
xweb_xhr: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129
Content-Type: application/json;charset=UTF-8
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://servicewechat.com/wx23d8d7ea22039466/2350/page-frame.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

{"id":"663090f1c431868bed8d5ebd","preview":false,"name":"高彬翔"}

根据内容,我写了一个python程序来下载:

import requests

url = 'https://a.welife001.com/getStudentScoreById'
headers = {
    'x-rid': 'C05879F9-3B3E-4EA3-8B31-EEEF14B73E38',
    'imprint': 'oWRkU0YSmzvhIyCZK30JJ0L-rVRA',
    'xweb_xhr': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/8555',
    'Content-Type': 'application/json;charset=UTF-8',
    'Accept': '*/*',
    'Sec-Fetch-Site': 'cross-site',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://servicewechat.com/wx23d8d7ea22039466/2350/page-frame.html',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9'
}
data = {"id": "663090f1c431868bed8d5ebd", "preview": False, "name": "高彬翔"}

response = requests.post(url, headers=headers, json=data)

print(response.text)

但是程序运行后很长一段时间没有反应,之后有报错:

requests.exceptions.ProxyError: HTTPSConnectionPool(host='a.welife001.com', port=443): Max retries exceeded with url: /getStudentScoreById (Caused by ProxyError('Unable to connect to proxy. Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#https-proxy-error-http-proxy', SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1124)'))))

关闭了证书验证,即verify=False也不行,不知道该怎么办。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-02 19:41
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试通过Python的requests库模拟发送一个与微信小程序类似的POST请求,但遇到了代理错误。首先,我们需要确认几个关键点:

    1. 你的网络环境是否配置了代理?如果有,请确保你已经正确设置了requests库中的代理设置。
    2. 请求头中的x-ridimprint字段通常是变化的,它们可能是用于追踪请求的唯一标识符或者安全令牌。你需要每次请求时获取最新的值,而不是使用固定的值。
    3. Content-Typeapplication/json;charset=UTF-8,这意味着你需要将JSON格式的数据传递给服务器。

    考虑到这些因素,我会建议你先从Fiddler中获取新的x-ridimprint值,然后调整你的代码。如果你没有代理设置,可以忽略代理部分。以下是修改后的代码示例:

    import requests
    import json
    
    def get_new_rid_imprint():
        # 这里需要一个函数来从Fiddler中获取新的x-rid和imprint值
        # 由于这是一个交互式的步骤,这里只能提供伪代码,你需要实际操作Fiddler来完成这部分
        # 例如,你可以手动在Fiddler中截取一个新的请求并提取这两个值
        new_rid = "新的x-rid值"  # 从Fiddler中获取
        new_imprint = "新的imprint值"  # 从Fiddler中获取
        return new_rid, new_imprint
    
    new_rid, new_imprint = get_new_rid_imprint()
    
    url = 'https://a.welife001.com/getStudentScoreById'
    headers = {
        'x-rid': new_rid,
        'imprint': new_imprint,
        'xweb_xhr': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/8555',
        'Content-Type': 'application/json;charset=UTF-8',
        'Accept': '*/*',
        'Sec-Fetch-Site': 'cross-site',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'https://servicewechat.com/wx23d8d7ea22039466/2350/page-frame.html',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9'
    }
    
    data = {"id": "663090f1c431868bed8d5ebd", "preview": False, "name": "高彬翔"}
    
    response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
    
    if response.status_code == 200:
        print("请求成功")
        print(response.json())
    else:
        print(f"请求失败,状态码:{response.status_code}")
        print(response.text)
    

    在这个版本的代码中,我们添加了一个辅助函数get_new_rid_imprint(),这个函数应该从Fiddler中获取新的x-ridimprint值。在实际运行时,你需要替换这个函数的实际实现,从Fiddler截取一个新的请求,并从中提取这两个值。

    另外,我们将json=data更改为data=json.dumps(data),因为requests库期望的是字节串,而不是一个dict对象。同时,为了简化测试,我们在发送请求时不验证证书,即verify=False。在生产环境中,你应该尽可能保持证书验证开启,除非你知道为什么需要禁用它。

    如果仍然遇到问题,请检查你的网络连接以及Fiddler中获取到的参数是否正确。如果还有其他错误,记得查看response的状态码和text信息,这通常能帮助定位问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图