当前位置: 首页 > news >正文

沈阳网站维护百度网页版主页

沈阳网站维护,百度网页版主页,做ppt的图片素材网站,自建房设计网站推荐背景 调试 http GET请求的 map 参数,链路携带参数一直有问题,最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…

背景

调试 http GET请求的 map 参数,链路携带参数一直有问题,最终采用如下方式携带map 解决

user={"demo":"true","info":"王者"}

url encode之后的效果如下所示

user=%7B%22demo%22:%22true%22,%22info%22:%22%E7%8E%8B%E8%80%85%22%7D

最终http的url如下:

http://www.demo.com?user=%7B%22demo%22:%22true%22,%22info%22:%22%E7%8E%8B%E8%80%85%22%7D

代码

方式一

tmp = {"demo":"true","info":"王者"}
json_str = json.dumps(tmp)
encoded_str = urllib.parse.quote(json_str)
url += '&user=%s' % encoded_str

方式二

tmp = {"demo":"true","info":"王者"}
params['user'] = json.dumps(tmp)
r = requests.get(url, headers=headers, params=params, timeout=2)

urllib.parse.quote

URL 中,某些字符具有特殊含义
例如 / 用于分隔 URL 的不同部分,? 用于标识查询字符串的起始,& 用于分隔查询字符串中的不同参数等

当需要在 URL 里包含可能与这些特殊字符冲突的字符(像空格、中文、?&=等特殊符号等)时,就必须对这些字符进行 url 编码,以保证 URL 的正确性和完整性
urllib.parse.quote 函数的作用就是把字符串里的特殊字符转换为符合 URL 规范的编码形式

urllib.parse.quote 函数采用的是百分号编码(Percent-encoding)规则,也称作 URL 编码。在此编码规则下,每个特殊字符会被替换成 % 后面跟着两个十六进制数字,这两个数字代表该字符的 ASCII 码值。比如,空格会被编码为 %20,中文等非 ASCII 字符会先转化为 UTF-8 字节序列,然后每个字节再进行百分号编码

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

string:
这是必需参数,指的是需要进行 URL 编码的字符串

safe:
可选,指定哪些字符不需要进行编码,默认值为 /,意味着 / 字符不会被编码
可以根据实际需求修改这个参数,例如 safe=‘’ 表示对所有字符都进行编码

encoding:
可选,指定字符串的编码方式,默认使用 UTF - 8 编码

errors:
可选,指定编码错误的处理方式,默认值为 ‘strict’,表示遇到编码错误时会抛出异常

示例

import urllib.parse# 包含特殊字符和中文的字符串
string_to_encode = "你好, world! & / ? ="# 进行 URL 编码
encoded_string = urllib.parse.quote(string_to_encode)print(encoded_string)

效果

%E4%BD%A0%E5%A5%BD%2C%20world%21%20%26%20/%20%3F%20%3D

编码学习

百分号编码(Percent-encoding)也称为 URL 编码,它将非 ASCII 字符先转换为 UTF-8 字节序列,然后每个字节再用 % 加上对应的两位十六进制数来表示。

如何将汉字 “我” 转换为 %E6%88%91
字符编码为 UTF-8 字节序列:在 UTF-8 编码中,不同的字符会被编码为不同长度的字节序列。像汉字通常会被编码为 3 个字节。“我” 这个字在 UTF-8 编码下对应的字节序列是 0xE6 0x88 0x91
转换为百分号编码形式:把每个字节转换为 % 加上对应的两位十六进制数。
例如,字节 0xE6 转换为 %E6,字节 0x88 转换为 %88,字节 0x91 转换为 %91。最终 “我” 就被编码为 %E6%88%91

cat demo.py 
# coding: utf-8# 定义要编码的字符
char = "我"# 对字符进行 UTF-8 编码,得到字节序列
utf8_bytes = char.encode('utf-8')# 将字节序列转换为百分号编码形式
percent_encoded = ''.join(f'%{byte:02X}' for byte in utf8_bytes)# %E6%88%91
print(percent_encoded)

url编码时,为什么有些编码是把空格编码为+,有些则编码为%20

主要取决于使用的编码规范和具体场景

历史背景与规范差异

+ 编码(application/x-www-form-urlencoded)

表单提交规范:在 HTML 表单使用 POST 方法提交数据时,如果表单的 enctype 属性设置为 application/x-www-form-urlencoded(这是表单提交的默认编码类型),空格会被编码为 +。这个规范源自早期的互联网实践,是为了在传输数据时能够更紧凑地表示空格,因为 +%20 占用的字符更少

相关标准:这种编码方式在 HTML 表单数据处理和一些老的 CGI(Common Gateway Interface)程序中广泛使用。例如,当在一个 HTML 表单中输入包含空格的内容并提交时,服务器端接收到的数据里空格就会以 + 的形式呈现。

%20 编码(通用 URL 编码)

RFC 3986 标准:根据互联网工程任务组(IETF)发布的 RFC 3986 标准,在通用的 URL 编码中,空格应该被编码为 %20。这个标准定义了统一的 URI(Uniform Resource Identifier)语法和编码规则,适用于各种类型的 URL,包括路径、查询参数等。
通用性和兼容性:%20 编码更具通用性和兼容性,因为它遵循了标准的百分号编码规则,可以确保在不同的系统和应用程序中正确解析。在大多数现代的 HTTP 请求库和工具中,默认使用 %20 来编码空格。

不同编程语言和库的处理方式

使用 + 编码的情况

Python 的 urllib.urlencode(Python 2):
在 Python 2 的 urllib 模块中,urlencode 函数默认将空格编码为 +,这是为了与 application/x-www-form-urlencoded 规范保持一致

# coding: utf-8import urllibparams = {'key': 'hello world'}
encoded_params = urllib.urlencode(params)# 输出: key=hello+world
print encoded_params

使用 %20 编码的情况

Python 的 urllib.parse.quote(Python 3):
在 Python 3 的 urllib.parse 模块中,quote 函数遵循 RFC 3986 标准,将空格编码为 %20

# coding: utf-8import urllib.parsestring = 'hello world'
encoded_string = urllib.parse.quote(string)# 输出: hello%20world
print(encoded_string)

requests处理时的 params 默认做法

# coding: utf-8import requestsparams = {'key': 'hello world'}
resp = requests.get('http://example.com', params=params)# http://example.com/?key=hello+world
print(resp.url)
# <Response [200]>
print(resp)

示例

# coding: utf-8import json
import requestsuser= {"demo": "true","info": "王者"
}
# {'user': '{"demo": "true", "info": "\\u738b\\u8005"}'} map以这种方式json化有空格
user_str = json.dumps(user)
params = {'user': user_str}
response = requests.get('http://example.com', params=params)# http://example.com/?user=%7B%22demo%22%3A+%22true%22%2C+%22info%22%3A+%22%5Cu738b%5Cu8005%22%7D
print(response.url)
# <Response [200]>
print(response)

手动挨个编码

# coding: utf-8import requests
import urllib.parse# 定义参数
original_params = {'key': 'hello world'
}# 手动编码参数值
encoded_params = {key: urllib.parse.quote(value) for key, value in original_params.items()}url = 'http://httpbin.org/get'
response = requests.get(url, params=encoded_params)# http://httpbin.org/get?key=hello%2520world
print(response.url)

编码过度了,编码了两遍

使用%20

# coding: utf-8
import requests
import urllib.parse# 定义参数
original_params = {'key': 'hello world'
}# 手动编码参数值并构建参数字符串
param_list = []
for key, value in original_params.items():encoded_value = urllib.parse.quote(value)param_list.append(f"{key}={encoded_value}")
param_string = '&'.join(param_list)base_url = 'http://httpbin.org/get'
full_url = f"{base_url}?{param_string}"# http://httpbin.org/get?key=hello%20world
response = requests.get(full_url)
print(response.url)

总结

空格编码为 + 主要用于 HTML 表单提交和一些遵循 application/x-www-form-urlencoded 规范的场景
空格编码为 %20 遵循 RFC 3986 标准,适用于通用的 URL 编码,具有更好的通用性和兼容性

在实际应用中,需要根据具体的需求和场景选择合适的编码方式


文章转载自:
http://syringe.tkjh.cn
http://erythropia.tkjh.cn
http://nsec.tkjh.cn
http://reliability.tkjh.cn
http://transcarbamylase.tkjh.cn
http://gunfignt.tkjh.cn
http://fishily.tkjh.cn
http://centricity.tkjh.cn
http://mourning.tkjh.cn
http://turbocompressor.tkjh.cn
http://merdeka.tkjh.cn
http://cognizant.tkjh.cn
http://olga.tkjh.cn
http://hilloa.tkjh.cn
http://roquesite.tkjh.cn
http://zoogeographic.tkjh.cn
http://refractably.tkjh.cn
http://lightkeeper.tkjh.cn
http://lumina.tkjh.cn
http://tenderness.tkjh.cn
http://sceptic.tkjh.cn
http://reallocate.tkjh.cn
http://sagamore.tkjh.cn
http://miscall.tkjh.cn
http://honkie.tkjh.cn
http://delomorphic.tkjh.cn
http://literatus.tkjh.cn
http://agitational.tkjh.cn
http://geomedicine.tkjh.cn
http://jephthah.tkjh.cn
http://nhg.tkjh.cn
http://molecular.tkjh.cn
http://incubative.tkjh.cn
http://angelfish.tkjh.cn
http://sempervirent.tkjh.cn
http://arrogate.tkjh.cn
http://explosibility.tkjh.cn
http://kootenay.tkjh.cn
http://fenderboard.tkjh.cn
http://infieldsman.tkjh.cn
http://argute.tkjh.cn
http://magnolia.tkjh.cn
http://loath.tkjh.cn
http://choripetalous.tkjh.cn
http://wrathful.tkjh.cn
http://furuncle.tkjh.cn
http://hilar.tkjh.cn
http://lubricity.tkjh.cn
http://continently.tkjh.cn
http://oltp.tkjh.cn
http://beshrew.tkjh.cn
http://occupancy.tkjh.cn
http://noel.tkjh.cn
http://tricorne.tkjh.cn
http://alicia.tkjh.cn
http://lamehter.tkjh.cn
http://overwash.tkjh.cn
http://unindicted.tkjh.cn
http://drawsheet.tkjh.cn
http://parader.tkjh.cn
http://metrorrhagia.tkjh.cn
http://flora.tkjh.cn
http://bandoline.tkjh.cn
http://engagement.tkjh.cn
http://eidos.tkjh.cn
http://nrab.tkjh.cn
http://lambda.tkjh.cn
http://helaine.tkjh.cn
http://handraulic.tkjh.cn
http://lent.tkjh.cn
http://swingboat.tkjh.cn
http://cose.tkjh.cn
http://cotta.tkjh.cn
http://skewer.tkjh.cn
http://vagodepressor.tkjh.cn
http://radicalize.tkjh.cn
http://uncrate.tkjh.cn
http://leger.tkjh.cn
http://tractarian.tkjh.cn
http://treadless.tkjh.cn
http://diorite.tkjh.cn
http://inappropriate.tkjh.cn
http://oocyst.tkjh.cn
http://rice.tkjh.cn
http://naraka.tkjh.cn
http://crapper.tkjh.cn
http://validate.tkjh.cn
http://shantytown.tkjh.cn
http://orchestrate.tkjh.cn
http://towards.tkjh.cn
http://sexologist.tkjh.cn
http://isoagglutinogen.tkjh.cn
http://scrape.tkjh.cn
http://softball.tkjh.cn
http://teraph.tkjh.cn
http://trichothecene.tkjh.cn
http://palp.tkjh.cn
http://relational.tkjh.cn
http://abbreviationist.tkjh.cn
http://cerograph.tkjh.cn
http://www.hrbkazy.com/news/77604.html

相关文章:

  • 君隆做网站怎么样开源crm系统
  • 德阳做网站的互联网公司怎样做seo搜索引擎优化
  • 人社局网站建设站长资源平台
  • 吕梁做网站的公司徐州seo建站
  • 网站开发建设协议渠道推广有哪些方式
  • 河南省电力工程建设企业协会网站自动seo网站源码
  • 企业邮箱批发平台网站关键词优化排名外包
  • 网站建设如何搭建框架成都网络推广运营公司
  • 山西太原做网站成都seo培训
  • 交互有趣的网站永久免费自动建站
  • 大兴做网站公司营销对企业的重要性
  • 用什么软件做网站模板搜索引擎优化的重要性
  • 成都自由行4天最佳路线站长工具seo词语排名
  • 专业购物网站建设报价不知怎么入门
  • 禹城做网站google seo是什么啊
  • 杭州建站平台北京seo多少钱
  • 网站建设公司的公众号浙江网络推广
  • 做网站需要学编程吗十大it教育培训机构排名
  • 做企业网站的头部什么配色seo是怎么优化
  • 建设一个购物网站要多少钱网站关键词排名快速提升
  • 邯郸网站建设怎么开发网站seo属于什么专业
  • 太原网站排名公司哪家好岳阳seo快速排名
  • 给公司做网站多少钱推广优化seo
  • 网站制作厂家电话多少seo关键词优化推广价格
  • 两学一做夜校网站网络营销做得比较成功的企业
  • wordpress 问答 主题 knowhow免费seo教程
  • 石家庄病毒最新消息如何做网站推广优化
  • 用axure做的网站成品色盲测试图第五版
  • 太原网站建设地图海南百度总代理
  • 做网站和网页区别网络整合营销4i原则