PHP模拟发送POST请求之二、用PHP和JS处理URL信息

明白了HTTP请求的头信息后,我们还需要对请求地址有所了解。再者,HTTP GET请求是靠URL实现的,所以了解URL的构造,处理URL的重要性不言而喻。

在PHP中我们用parse_url()函数来处理URL信息。

其函数原型如下:

array parse_url ( string $url [,URL_COSTANT]) 本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。 对严重不合格的 URL,parse_url() 可能会返回 FALSE 并发出 E_WARNING。否则会返回一个关联数组,其组成部分为(至少有一个)

其正确的返回值如下:

 scheme  http 协议信息 

 host   主机信息 

 port   端口号

 user   用户名

 pass   密码

 path  站内路径

 query  在问号 ? 之后的查询信息  

 fragment  在散列符号 # 之后 锚点信息 Hash信息

下面是一个典型的URL字符串,我们对其用parse_url()解析,并输出其结果数组。

$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor';

$arr=parse_url($url);

array (size=8)

'scheme' => string 'https' 

'host' => string 'www.baidu.com' 

'port' => int 8080

'user' => string 'zbs' 

'pass' => string 'mypass' 

'path' => string '/home/index.html' 

'query' => string 'gender=male&write=code' 

'fragment' => string 'anchor'

另外,我们还可以对第二个参数赋值,指定要返回的URL部分,对应的URL_CONST取值如下:

scheme:PHP_URL_SCHEME, 

host:PHP_URL_HOST, 

port:PHP_URL_PORT, 

user:PHP_URL_USER, 

pass:PHP_URL_PASS, 

path:PHP_URL_PATH, 

query:PHP_URL_QUERY,

fragment:PHP_URL_FRAGMENT.

例如我们要指定返回地址的查询字段信息:

$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor';

$arr=parse_url($url,PHP_URL_QUERY);//string '/home/index.html

理解了如何拆分URL信息后,我们也更需要学会拼合URL信息,拼合URL信息有一个专门的函数http_build_url(),但此函数因其处理繁琐,一般较少使用,我们常用字符串来拼合URL,在处理较多的查询信息(query_string)时,我们会用http_build_query()函数。

http_build_query()函数能帮我们将一个关联数组快速拼合成一个查询字符串,它甚至可以将一个对象分析拼合为一个查询字符串,但要注意,它只能保留修饰符为"public"的"属性",其余信息将会被舍弃。

例:

$info=['run'=>'10km','eat'=>'3kg'];

var_dump(http_build_query($info));//string 'run=10km&eat=3kg'

class Msg{

  public $attr_public="value_public";

  protected $attr_protected="value_protected";

  private $attr_private="value_private";

  function foo(){

    echo "foo";

  }

}

$msg=new Msg();

var_dump(http_build_query($msg));//string 'attr_public=value_public'

另:JS获取当前url信息:

Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问,它包含了有关当前 URL 的信息。

Location 对象属性

属性       描述

hash     URL锚点信息

host     主机名和当前 URL 的端口号

hostname  当前URL的主机名

href     完整的URL

pathname    当前URL的路径部分

port         当前URL的端口号

protocol   当前URL的协议

search      查询字符串

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 插件接口IModule

  我们知道,要基于平台(容器)+插件的这种模式进行开发,我们必须定义一组契约,用于约束模块插件开发,也就是说,模块插件需要遵守一定的标准进行开发,才能正常被容...

2077
来自专栏coding

python的多进程与多fork

1093
来自专栏java 成神之路

jvm 性能调优工具之 jinfo

3538
来自专栏Linyb极客之路

工作流引擎之activiti流程定义

ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审...

1113
来自专栏玄魂工作室

CTF实战29 Linux缓冲区溢出

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

923
来自专栏编程微刊

Node.js自学笔记之回调函数

1537
来自专栏haifeiWu与他朋友们的专栏

Redis协议规范(译文)

Redis客户端使用名为RESP(Redis序列化协议)的协议与Redis服务器进行通信。 虽然该协议是专为Redis设计的,但它可以用于其他CS软件项目的通讯...

1013
来自专栏服务端思维

Spring Boot 揭秘与实战 关于配置文件有哪些很棒的特性

Spring 框架本身提供了多种的方式来管理配置属性文件。Spring 3.1 之前可以使用 PropertyPlaceholderConfigurer。Spr...

753
来自专栏程序人生 阅读快乐

Python源码剖析

作为主流的动态语言,Python不仅简单易学、移植性好,而且拥有强大丰富的库的支持。此外,Python强大的可扩展性,让开发人员既可以非常容易地利用C/C++编...

881
来自专栏Aloys的开发之路

Hibernate与autoCommit

JDBC 的autoCommit属性 对于每一个 JDBC connection,都有一个autoCommit属性,只有执行commit后,该connectio...

1778

扫码关注云+社区