入门python尝试写了一个post短信发送的代码,无报错,返回200,却没有收到请求短信

环境

环境 : python3.9
requests :2.25.1
操作系统 : MacOS BigSur(11.1 (20C69))

代码(仅用于学习交流)

import requests

def phone_number(number):

    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6,ko;q=0.5',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Host': '23.224.185.10:9991',
        'Referer': 'http://23.224.185.10:9991/?hm={}&ok=%E7%82%B9%E5%87%BB%E5%BC%80%E5%A7%8B'.format(number),
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
    }

    data = {
        'hm' : number,
        'ok' : '%E7%82%B9%E5%87%BB%E5%BC%80%E5%A7%8B'
    }

    #请求前链接
    # url = 'http://23.224.185.10:9991/?'

    #请求后链接
    url = 'http://23.224.185.10:9991/?hm={}&ok=%E7%82%B9%E5%87%BB%E5%BC%80%E5%A7%8B'.format(number)

    response = requests.get(url=url,headers=headers,data=data)
    print('测试完成',response.status_code)

if __name__ == '__main__':
    number = input('输入手机号:')
    phone_number(number)

问题

  • 请求前链接 url = ‘23.224.185.10:9991/?’
  • pycharm 内发送请求返回状态码200并且无报错,但是不发送短信
  • chorme 填入号码发送请求后,开始立即收到短信。

找了很多地方都没有得到问题的回复,希望能在这里获得答案
首次发帖内容可能不符合规范,后续会针对文章格式进行改进

Jason990420
最佳答案

在使用爬虫中, 经常会遇到网页请求数据是经过 JS 处理的, 我们可以尝试使用一些第三方库 ,来直接执行 JS 代码得到处理过后的结果, 比如PyExecJS, PyV8, Js2Py.

当选择完合适的库后,如果你还不明白在浏览器里进行 Debug 的方法,那需要去搜索关键词先学习一下。接下来就是定位目标网页需要调用的 JS 函数,这里实在无法详述,因为每个网站的写法都大不相同。 不过只要你通过Debug ,查看数据从请求开始,每一步都经过了哪些JS 函数,又输出成什么样的数据,就可以顺藤摸瓜找到一些可疑的函数,然后将这些方法逐一复制出来,通过上面的库传入参数执行,看是否和目标网页处理后的数据一致,就可以找到目标函数。

3年前 评论
Scrooge (楼主) 3年前
讨论数量: 2
Jason990420

收到的网页内容没开启,当然没动作.

>>> print(response.content.decode())
<!DOCTYPE html>
<html>
    <head> 
        <meta charset="utf-8" /> 
        <meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport" /> 
        <title>短信测压-</title> 
        <meta content="TransparentLC" name="Colin" /> 
        <meta content="no-siteapp" http-equiv="Cache-Control" /> 
        <meta content="no-transform" http-equiv="Cache-Control" /> 
        <link href="https://cdn.jsdelivr.net/npm/mdui/dist/css/mdui.min.css" rel="stylesheet" /> 
        <link href="https://cdn.jsdelivr.net/gh/TransparentLC/WechatMomentScreenshot/style.min.css" rel="stylesheet" /> 
        <link rel="stylesheet" type="text/css" href="http://lib.baomitu.com/font-awesome/4.7.0/css/font-awesome.min.css" />
    </head> 
    <body class="mdui-appbar-with-toolbar mdui-theme-accent-pink mdui-theme-primary-indigo"> 

...

        <!-- script id="xplayer" src="https://music.xingyaox.com/api/PlayerJs/id/5f6af8e860cf8"></script -->
        <!-- script src="main.js"></script -->
    </body>
</html>
3年前 评论
Scrooge (楼主) 3年前
Jason990420

在使用爬虫中, 经常会遇到网页请求数据是经过 JS 处理的, 我们可以尝试使用一些第三方库 ,来直接执行 JS 代码得到处理过后的结果, 比如PyExecJS, PyV8, Js2Py.

当选择完合适的库后,如果你还不明白在浏览器里进行 Debug 的方法,那需要去搜索关键词先学习一下。接下来就是定位目标网页需要调用的 JS 函数,这里实在无法详述,因为每个网站的写法都大不相同。 不过只要你通过Debug ,查看数据从请求开始,每一步都经过了哪些JS 函数,又输出成什么样的数据,就可以顺藤摸瓜找到一些可疑的函数,然后将这些方法逐一复制出来,通过上面的库传入参数执行,看是否和目标网页处理后的数据一致,就可以找到目标函数。

3年前 评论
Scrooge (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!