URL传参中需要处理的特殊字符及方法

18 篇文章 0 订阅

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/54613310,建议读者阅读原文,确保获得完整的信息

1.举例说明

例如实际请求URL如下:

http://www.douwansha.com/mdeditor?data=[{"address":null,"name":"公司名称=阿里巴巴集团","id":"12345","priority":null,"tel":null,"urllink":"1","keytype":null,"errortype":"测试项目","errordesc":"过年咯","submit_user":"loongshawn"}]&dize=1&user=loongshawn

服务器返回结果:

"服务器异常:\r\nnet.sf.json.JSONException: Found starting '[' but missing ']' at the end. at character 0 of null

这个异常很明显是由于URL的data参数中的name属性内容包含一个特殊字符”=”,导致data解析JSON异常,这个时候比较简单的方法就是把特殊字符替换掉,接下来看看URL中都有哪些特殊字符。

2.特殊字符

  • 1.+ URL 中+号表示空格 %2B

  • 2.空格 URL中的空格可以用+号或者编码 %20

  • 3./ 分隔目录和子目录 %2F

  • 4.? 分隔实际的 URL 和参数 %3F

  • 5.% 指定特殊字符 %25

  • 6.# 表示书签 %23

  • 7.& URL 中指定的参数间的分隔符 %26

  • 8.= URL 中指定参数的值 %3D

如果传递参数中包含上述特殊字符,比较标准的做法是先对参数value进行URLEncoder编码,然后解析是再利用URLDecoder解码。

java中URL 的编码和解码函数:

  • 编码:java.net.URLEncoder.encode(String s);

  • 解码:java.net.URLDecoder.decode(String s);

可能有时候编程方式并不一定遵循标准的做法(依据实际业务而定),比如并没有利用URL编码解码规范,直接是明文传输,这个时候可以仅仅针对参数值中的参数进行过滤处理,比如将特殊字符替换掉等。

如下方法,过滤掉特殊字符,但前提是不影响信息的理解。

public static String getUrlReplacedValue(String value){

        String str = value.replace("&", "-")
                          .replace("=", "-")
                          .replace("#", "-")    
                          .replace("%", "-")    
                          .replace("/", "-")
                          .replace("?", "-");   

        return str;
    }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Python使用GET请求URL数可以通过以下步骤实现: 1. 导入requests库 2. 构造请求URL数 3. 发送请求并获取响应 4. 解析响应数据 具体实现可以考以下代码: ```python import requests # 构造请求URLurl = 'http://example.com/api' params = {'key1': 'value1', 'key2': 'value2'} # 发送请求并获取响应 response = requests.get(url, params=params) # 解析响应数据 if response.status_code == 200: data = response.json() print(data) else: print('请求失败') ``` 其,`params`数是一个字典类型,用于存储请求数。在发送请求时,`requests.get()`方法会将`params`数自动转换为URL数,并拼接到请求URL。最终发送的请求URL为:`http://example.com/api?key1=value1&key2=value2`。 ### 回答2: Python使用GET请求的方式有多种,下面列举其的两种方式。 1. 使用urllib库的urlencode()函数对数进行编码。 具体步骤如下: 1)导入urllib库 import urllib.parse 2)定义数字典 params = { 'key1': 'value1', 'key2': 'value2' } 3)对数编码 query_string = urllib.parse.urlencode(params) 4)完整URL url = 'http://www.example.com/?' + query_string 最终生成的URL为:http://www.example.com/?key1=value1&key2=value2。 2. 直接拼接URL数 具体步骤如下: 1)定义数字典 params = { 'key1': 'value1', 'key2': 'value2' } 2)拼接URLurl = 'http://www.example.com/?' + '&'.join([key + '=' + value for key, value in params.items()]) 本方法先将数字典转换为列表,再使用列表解析式将列表的每个元素转换为字符串,并将它们用&符号连接,最终生成完整URL需要注意的是,上述两种方式均使用GET请求,但前者使用了编码方法,后者没有编码。在构造URL时,如果数值包含特殊字符(如空格、汉字等),则需要使用urlencode()函数进行编码。 ### 回答3: Python语言的requests库是一款非常常用的HTTP客户端库,可以用来发送各种HTTP请求。对于GET请求来说,我们可以通过URL的方式来向服务器数。下面就来详细介绍一下Python如何使用requests库进行GET请求,以及如何进行URL。 1. 发送GET请求 使用requests库发送GET请求其实非常简单,只需要构建一个url,然后调用requests.get方法即可。如下所示: ```python import requests url = 'http://www.baidu.com' response = requests.get(url) ``` 上面的代码,我们首先引入了requests库,然后构建了一个url,将其赋值给了变量url。接着我们调用requests.get方法,并将url作为入,得到了一个response对象,其包含了请求所响应的内容。 2. URL 很多时候我们需要向服务器递一些数,以便服务器做出相应的响应。对于GET请求,我们可以将这些数通过URL进行递。URL的基本语法为: ``` http://www.example.com?name=value1&age=value2 ``` 其,问号后的部分就是我们要递的数。例如,我们需要向服务器递name和age两个数,可以这样构建URL: ```python import requests url = 'http://www.example.com?name=张三&age=18' response = requests.get(url) ``` 在上面的代码,我们构建了一个带有两个数的URL,然后调用requests.get方法发送请求。当服务器接收到这个请求后,就可以通过request.args获取到这两个数的值。 ```python @app.route('/') def hello_world(): name = request.args.get('name') age = request.args.get('age') return 'Hello, {}! Your age is {}.'.format(name, age) ``` 上面的代码是一个Flask的例子,它可以从request.args获取到name和age两个数的值,并将它们拼接成字符串返回给客户端。 综上所述,Python可以通过requests库来发送GET请求,并可以通过URL的方式向服务器数。开发者只需要按照上面的示例代码即可轻松实现相应功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值