Referer 是 HTTP 请求头的一部分,它告诉服务器请求是从哪个页面链接过来的,这对于某些需要防盗链或者验证来源的网站非常重要。

易语言网页访问设置来源
(图片来源网络,侵删)

下面我将详细介绍两种在易语言中设置 Referer 的常用方法。


使用 网页访问 命令(最常用)

这是最直接、最常用的方法。网页访问 命令有一个可选的参数 附加数据,我们可以通过构造一个特殊的字符串来设置请求头,包括 Referer

核心思路

附加数据 参数的格式是:头名1:值1 # 头名2:值2 # ...

要设置 Referer,我们只需要构造出 Referer:https://www.example.com 这样的字符串,并传递给 附加数据 参数即可。

易语言网页访问设置来源
(图片来源网络,侵删)

示例代码

下面是一个完整的示例,演示如何访问一个网站并设置 Referer

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 html, 文本型
.局部变量 referer, 文本型
' 1. 定义你想要设置的 Referer 值
'    这个值通常是你当前页面的 URL,或者一个伪造的来源 URL
referer = "https://www.baidu.com/s?wd=易语言"
' 2. 构造附加数据字符串
'    格式为 "Referer:你的URL"
'    注意,这里的 "Referer" 是固定的,冒号后面是你要设置的值
.如果真 (referer = "")
    ' Referer 为空,可以不设置附加数据,或者设置一个通用的
    ' html = 网页访问 ("http://httpbin.org/get", , , , , )
.否则
    ' 构造包含 Referer 的附加数据
    html = 网页访问 ("http://httpbin.org/get", , , , "Referer:" + referer, )
.如果结束
' 3. 显示结果
'    httpbin.org 是一个专门用于测试 HTTP 请求的网站,它会返回所有请求头信息
'    我们可以在这里看到 Referer 是否被成功设置= html
.子程序 网页访问
.参数 地址, 文本型
.参数 请求方式 = "GET", 文本型
.参数 数据, 文本型
.参数 编码 = "UTF-8", 文本型
.参数 附加数据, 文本型
.参数 用户代理 = "", 文本型

代码解析:

  1. 定义 referer 变量:我们首先定义一个文本变量 referer 并给它赋值,这个值就是我们希望服务器看到的来源网址。
  2. 调用 网页访问
    • 地址"http://httpbin.org/get",这是一个测试网站,它会把收到的所有请求信息(包括请求头)以 JSON 格式返回给我们,方便我们验证。
    • 附加数据"Referer:" + referer,这是关键,我们将 "Referer:" 和我们定义的 referer 变量拼接起来,形成符合格式的字符串,最终传递给命令的值是 "Referer:https://www.baidu.com/s?wd=易语言"
  3. 显示结果:将 httpbin.org 返回的 HTML 内容(即 JSON 数据)放到编辑框中,你可以运行程序,然后检查返回的 JSON 数据里,是否有一个 "Referer" 字段,其值就是我们设置的 https://www.baidu.com/s?wd=易语言

使用 网页访问_超文本传输 命令(更灵活)

网页访问_超文本传输网页访问 的一个底层封装,它提供了更精细的控制,可以设置更多的 HTTP 头信息,包括 User-AgentCookieReferer 等。

核心思路

这个命令通过一个“属性列表”来设置请求头,我们需要创建一个属性列表,然后将其赋值给 请求头 属性。

易语言网页访问设置来源
(图片来源网络,侵删)

示例代码

.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 http, 对象
.局部变量 headers, 文本型
.局部变量 html, 文本型
' 1. 创建网页访问对象
.如果真 (创建对象 (http, "WinHttp.WinHttpRequest.5.1"))
    ' 2. 设置请求方法,GET
    http.请求方法 ("GET")
    ' 3. 设置请求头
    '    创建一个文本变量来存放所有请求头,每个头用 # 分隔
    headers = "Referer:https://google.com # User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    http.请求头 (headers)
    ' 4. 发送请求
    .如果真 (http.打开 ("GET", "http://httpbin.org/get", 假))
        .如果真 (http.发送 ())
            ' 5. 获取响应文本
            html = http.响应文本 ()
        .否则
            信息框 ("发送请求失败:" + http.错误信息, 0, , )
        .如果结束
    .否则
        信息框 ("打开请求失败:" + http.错误信息, 0, , )
    .如果结束
    ' 6. 释放对象
    .如果真 (到对象 (http))
        .如果真 (http.取类名 () ≠ "")
            http.销毁 ()
        .如果结束
    .如果结束
    ' 7. 显示结果
    编辑框1.内容 = html
.否则
    信息框 ("创建 WinHttpRequest 对象失败,请检查系统是否支持。", 0, , )
.如果结束

代码解析:

  1. 创建对象:使用 创建对象 命令创建一个 WinHttp.WinHttpRequest.5.1 对象,这是 Windows 系统自带的一个强大的 HTTP 客户端组件。
  2. 设置请求方法http.请求方法 ("GET") 明确指定使用 GET 方法。
  3. 设置请求头
    • 我们构造了一个 headers 文本变量。
    • 格式"头名1:值1 # 头名2:值2"
    • 我们在 headers 中同时设置了 RefererUser-Agent,展示了如何一次性设置多个请求头。
    • http.请求头 (headers) 将这个字符串应用到请求上。
  4. 发送与获取响应:通过 http.打开()http.发送()http.响应文本() 完成整个请求过程。
  5. 释放对象:使用完毕后,调用 http.销毁() 释放对象,避免内存泄漏。

总结与对比

特性 方法一 (网页访问) 方法二 (网页访问_超文本传输)
易用性 非常简单,一行代码搞定,适合快速实现。 相对复杂,需要创建和管理对象,但功能更强大。
灵活性 较低,主要设置 RefererUser-Agent 非常高,可以设置几乎所有的 HTTP 头,如 CookieAuthorization 等。
适用场景 大多数常规需求,尤其是只需要设置 Referer 时。 需要精细控制 HTTP 请求,如模拟登录、处理复杂 API、上传文件等。
底层组件 内部封装,可能使用不同的 HTTP 控件。 明确使用 WinHttpRequest,行为更可控。

推荐建议:

  • 如果你只是想简单地设置一个 Referer,直接使用 方法一 (网页访问),代码简洁明了。
  • 如果你的程序需要处理复杂的网络请求,或者需要同时设置多个请求头(如 CookieAuthorization Token 等),强烈推荐使用 方法二 (网页访问_超文本传输),它的灵活性和功能性远超前者。

希望这个详细的解释能帮助你理解如何在易语言中设置网页访问的来源!