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 条评论
登录 后参与评论

相关文章

来自专栏逍遥剑客的游戏开发

Nebula3学习笔记(5): IO系统

1934
来自专栏calmound

getchar

跟你分享个东西,我也是刚刚在网上查到的,和我想的差不多,呵呵~~~~ getchar是以行为单位进行存取的。 当用getchar进行输入时,如果输入的第一个字符...

3626
来自专栏凉城

WordPress 如何判断一篇文章是否存在

2354
来自专栏腾讯IVWEB团队的专栏

nodejs 中错误捕获的一些最佳实践

本文为翻译文章,原文比较长,感觉也有点啰嗦,所以根据个人理解猜测梳理出本文。

6260
来自专栏Java后端技术

详解web.xml中元素的加载顺序

  最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了...

1062
来自专栏更流畅、简洁的软件开发方式

分页解决方案 之 数据访问函数库——另类的思路、另类的写法,造就了不一样的发展道路。

    如何访问数据库?一个老掉牙的问题,方法多了去了,什么直接使用ado.net、使用SQLHelp、使用微软的企业库、使用ORM、使用LinQ to SQL...

2448
来自专栏orientlu

FreeRTOS 消息队列

上面这几中方式中, 除了消息通知, 其他几种实现都是基于消息队列。消息队列作为主要的通信方式, 支持在任务间, 任务和中断间传递消息内容。 这一章介绍 Fre...

4182
来自专栏python3

Django的路由控制

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于...

3672
来自专栏逸鹏说道

Python3 与 C# 并发编程之~ 进程实战篇

之前说过 Queue:在 Process之间使用没问题,用到 Pool,就使用 Manager().xxx, Value和 Array,就不太一样了:

1674
来自专栏IMWeb前端团队

让fetch也可以timeout

本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 原生的HTML5 API fetch并不支持timeout属性...

2275

扫码关注云+社区

领取腾讯云代金券