python解析URL中含有特殊符号的地址

摘要

今天在用curl调用一个solr地址查询数据的时候报错,发现是因为URL地址中含有[ 中括号 导致的,既然shell的curl命令不行,想着Python的urllib包可以解析URL地址,那就尝试这个

curl 执行报错

错误的情况:

root@pts/3 $ curl "http://192.168.xxx.xxx:8983/solr/core1_shard2_replica1/select?q=*:*&fq=sex:1&fq=activeTime_tdt:[NOW-20MINUTE TO NOW]&wt=json&indent=true"
curl: (3) [globbing] error: bad range specification after pos 96

如果去掉中间包含中括号的查询条件则用curl没有问题

root@pts/3 $ curl "http://192.168.xxx.xxx:8983/solr/core1_shard2_replica1/select?q=*:*&fq=sex:1&wt=json&indent=true"
{
  "responseHeader":{
    "status":0,
    "QTime":8,
    "params":{
      "q":"*:*",
      "indent":"true",
      "fq":"sex:1",
      "wt":"json"}},
      ...

python urllib

这里给出具体的例子

root@pts/3 $ python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> urlstr = "http://192.168.xxx.xxx:8983/solr/core1_shard2_replica1/select?q=*:*&fq=sex:1&fq=activeTime_tdt:[NOW-20MINUTE TO NOW]&wt=json&indent=true"
>>> result = urllib.urlopen(urlstr)
>>> print(result)
<addinfourl at 36354168 whose fp = <socket._fileobject object at 0x7f437fe03c50>>
>>> print(result.read())
{
  "responseHeader":{
    "status":0,
    "QTime":11,
    "params":{
      "q":"*:*",
      "indent":"true",
      "fq":["sex:1",
        "activeTime_tdt:[NOW-20MINUTE TO NOW]"],
      "wt":"json"}},

最后可以结合Python的正则表达式来等来实现自己个性化的需求

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,929评论 4 418
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,687评论 6 427
  • 今天送孩子去学校,到了接送点,于晨阳就跟同学一起进学校了。也不知道为什么?今天没有像往常一样,驻足在哪里停一会!而...
    阿涛演艺阅读 2,726评论 1 3
  • 我走在沙漠里, 沙子已完全灌入 我宽松的鞋子里, 我的脚踝被黄色的沙土包裹着, 直感到灼人的烫,脚上脚下, 必定是...
    小狗汪汪汪阅读 3,073评论 0 0