通过用户ID(如UID)登录并访问需要登录的网页

这是最常见的理解,很多网站(如微博、B站、知乎等)的个人信息页面需要登录后才能访问,其URL中通常包含用户的唯一标识符,即UID。https://weibo.com/u/1234567890

易语言如何通过UID访问网页
(图片来源网络,侵删)

这里的“通过UID访问”指的是:

  1. 第一步:登录,你需要先向网站的登录接口发送你的用户名和密码,获取到登录凭证(通常是Cookie)。
  2. 第二步:携带凭证访问,在访问包含UID的URL时,必须带上第一步获取到的登录凭证,服务器才会承认你的身份,允许你查看该页面。

下面,我们以一个模拟的登录流程为例,讲解如何实现。

核心思路

  1. 分析登录接口:使用浏览器开发者工具(F12)的“网络”面板,手动登录一次网站,找到处理登录请求的API接口地址、请求方法(通常是POST)、需要提交的参数(用户名、密码等)以及服务器返回的响应(特别是包含登录凭证的Cookie)。
  2. 编写易代码模拟登录
    • 使用.支持库中的超级列表框自定义数据类型来存储请求头、请求参数等。
    • 使用网页访问_取网页源码()网页访问_取数据() 等命令,向登录接口发送POST请求。
    • 从服务器返回的响应头或响应数据中,提取出关键的登录凭证(如Set-Cookie中的值)。
  3. 编写易代码访问目标页面
    • 创建一个新的请求,目标URL是包含UID的页面地址。
    • 在请求头中加入上一步获取到的登录凭证(通常是Cookie字段)。
    • 发送请求,获取目标页面的HTML源码。

代码示例

假设我们要登录一个虚构的网站,其登录接口是 https://example.com/api/login,需要POST usernamepassword 参数,登录成功后,服务器会返回一个 sessionid,我们需要用它来访问 https://example.com/user/12345 这个页面。

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
    .局部变量 loginHeaders, 文本型, , "0"
    .局部变量 loginParams, 文本型, , "0"
    .局部变量 responseHeaders, 文本型, , "0"
    .局部变量 responseBody, 文本型, , "0"
    .局部变量 sessionId, 文本型, , "0"
    .局部变量 targetUrl, 文本型, , "0"
    .局部变量 targetHeaders, 文本型, , "0"
    .局部变量 targetSource, 文本型, , "0"
    ' --- 第一步:模拟登录 ---
    ' 1.1. 设置登录请求头
    loginHeaders = "Content-Type: application/x-www-form-urlencoded" + #换行符
    ' 1.2. 设置登录请求参数 (替换成你的真实账号密码)
    loginParams = "username=你的用户名&password=你的密码"
    ' 1.3. 发送登录请求
    ' 注意:这里的 .取网页源码() 返回的是服务器响应体
    ' .取数据() 可以同时获取响应头和响应体,更灵活
    .如果真 (网页访问_取数据 (“https://example.com/api/login”, loginParams, loginHeaders, , , responseHeaders, responseBody))
        ' 1.4. 从响应头中提取登录凭证 (这里是 sessionid)
        ' 响应头格式可能是: "Set-Cookie: sessionid=abc123; Path=/"
        sessionId = 取文本_中间 (responseHeaders, "sessionid=", ";")
        .如果真 (sessionId ≠ "")
            信息框 (“登录成功,获取到 SessionID: ” + sessionId, 0, , )
            ' --- 第二步:携带凭证访问UID页面 ---
            ' 2.1. 设置目标URL (这里用 123 作为示例UID)
            targetUrl = "https://example.com/user/123"
            ' 2.2. 设置访问目标页面所需的请求头,并加入登录凭证
            targetHeaders = "Cookie: sessionid=" + sessionId + #换行符
            ' 2.3. 发送请求获取目标页面源码
            .如果真 (网页访问_取网页源码 (targetUrl, , targetHeaders, , , targetSource))
                ' 2.4. 显示或处理获取到的源码
                ' 通常源码很长,这里只显示前200个字符作为示例
                编辑框_目标页面源码.内容 = 取文本左边 (targetSource, 200)
                信息框 (“成功访问UID页面!源码已载入编辑框。”, 0, , )
            .否则
                信息框 (“访问UID页面失败,错误: ” + 到文本 (网页访问_取最后错误代码 ()), 0, , )
            .如果结束
        .否则
            信息框 (“登录失败,未能获取到 SessionID。”, 0, , )
        .如果结束
    .否则
        信息框 (“登录请求失败,错误: ” + 到文本 (网页访问_取最后错误代码 ()), 0, , )
    .如果结束
.子程序

代码解释

易语言如何通过UID访问网页
(图片来源网络,侵删)
  • loginHeadersloginParams:构造了登录时需要发送的数据。Content-Type 告诉服务器我们发送的是表单数据。
  • 网页访问_取数据():这是一个非常强大的命令,它可以同时获取响应头(responseHeaders)和响应体(responseBody),我们用它来登录。
  • 取文本_中间():从返回的响应头字符串中,巧妙地提取出 sessionid 的值。
  • targetHeaders:这是关键!我们在新的请求头中加入了 Cookie 字段,其值就是刚刚登录获取到的 sessionId,这告诉服务器:“我已经登录过了,这是我的身份证明”。
  • 网页访问_取网页源码():使用构造好的请求头去访问目标UID页面,成功后就能获取到该页面的HTML源码。

直接通过UID构造URL并访问(无需登录或公开页面)

有些网站的用户主页、帖子等是公开的,不需要登录就能访问,它们的URL本身就是由UID构成的,https://tieba.baidu.com/p/123456789(这里的帖子ID就是一种UID)。

这种情况非常简单,直接构造URL然后用 网页访问_取网页源码() 访问即可。

核心思路

  1. 确定URL格式:了解网站中通过UID访问页面的URL规则。https://example.com/profile?uid=123
  2. 拼接URL:在易语言中,使用 到文本() 函数将UID数值转换为字符串,然后与固定的URL部分拼接起来。
  3. 直接访问:调用 网页访问_取网页源码() 访问拼接好的完整URL。

代码示例

假设我们要访问一个公开的用户资料页,URL格式为 https://api.example.com/public/profile?uid=用户ID

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
    .局部变量 baseUrl, 文本型
    .局部变量 uid, 整数型
    .局部变量 fullUrl, 文本型
    .局部变量 pageSource, 文本型
    ' 1. 设置基础URL
    baseUrl = "https://api.example.com/public/profile?uid="
    ' 2. 获取或定义UID (这里用 98765 作为示例)
    uid = 98765
    ' 3. 拼接完整的URL
    fullUrl = baseUrl + 到文本 (uid)
    ' 4. 直接访问该URL并获取源码
    .如果真 (网页访问_取网页源码 (fullUrl, , , , , pageSource))
        ' 5. 处理获取到的源码
        编辑框_目标页面源码.内容 = pageSource
        信息框 (“成功通过UID访问公开页面!源码已载入编辑框。”, 0, , )
    .否则
        信息框 (“访问失败,错误: ” + 到文本 (网页访问_取最后错误代码 ()), 0, , )
    .如果结束
.子程序

代码解释

易语言如何通过UID访问网页
(图片来源网络,侵删)
  • 这个例子非常直观,核心就是字符串的拼接。
  • baseUrl + 到文本(uid) 将基础URL和UID数字连接成一个完整的、可访问的网址。
  • 由于是公开页面,不需要任何登录凭证,所以直接调用 网页访问_取网页源码() 即可。

总结与重要提示

特性 场景一 (需登录) 场景二 (公开页面)
核心步骤 模拟登录获取凭证
携带凭证访问目标URL
拼接包含UID的URL
直接访问该URL
关键技术 分析登录接口、处理POST请求、提取和管理Cookie 字符串拼接、构造GET请求
易语言命令 网页访问_取数据(), 取文本_中间() 网页访问_取网页源码(), 到文本()
适用场景 访问个人主页、发帖、评论等需要身份验证的操作 访问公开的用户资料、帖子、文章等

给易语言开发者的建议

  1. 善用浏览器开发者工具:这是进行网页抓取和模拟登录的必备工具,它能让你清晰地看到网络请求的每一个细节,是成功的关键。
  2. 处理验证码:现在很多网站有登录验证码,易语言原生处理图形验证码比较困难,可以考虑使用打码平台接口,或者通过selenium等自动化工具驱动真实浏览器来解决。
  3. 尊重网站规则:在编写爬虫或自动化脚本时,请务必遵守目标网站的 robots.txt 协议,不要过于频繁地请求,以免对服务器造成过大压力,导致你的IP被屏蔽。
  4. 错误处理:网络请求有很多不确定性(如超时、服务器错误、网络断开等),代码中一定要加入完善的错误判断,使用 如果真否则 来处理各种异常情况。